Morpheus / mbed-tools

Fork of mbed-tools by -deleted-

Committer:
screamer
Date:
Wed Mar 30 16:23:44 2016 +0000
Revision:
0:4a2e5f0422d6
Child:
2:5f044fef8f98
Initial revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:4a2e5f0422d6 1 """
screamer 0:4a2e5f0422d6 2 mbed SDK
screamer 0:4a2e5f0422d6 3 Copyright (c) 2011-2013 ARM Limited
screamer 0:4a2e5f0422d6 4
screamer 0:4a2e5f0422d6 5 Licensed under the Apache License, Version 2.0 (the "License");
screamer 0:4a2e5f0422d6 6 you may not use this file except in compliance with the License.
screamer 0:4a2e5f0422d6 7 You may obtain a copy of the License at
screamer 0:4a2e5f0422d6 8
screamer 0:4a2e5f0422d6 9 http://www.apache.org/licenses/LICENSE-2.0
screamer 0:4a2e5f0422d6 10
screamer 0:4a2e5f0422d6 11 Unless required by applicable law or agreed to in writing, software
screamer 0:4a2e5f0422d6 12 distributed under the License is distributed on an "AS IS" BASIS,
screamer 0:4a2e5f0422d6 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:4a2e5f0422d6 14 See the License for the specific language governing permissions and
screamer 0:4a2e5f0422d6 15 limitations under the License.
screamer 0:4a2e5f0422d6 16
screamer 0:4a2e5f0422d6 17
screamer 0:4a2e5f0422d6 18 One repository to update them all
screamer 0:4a2e5f0422d6 19 On mbed.org the mbed SDK is split up in multiple repositories, this script takes
screamer 0:4a2e5f0422d6 20 care of updating them all.
screamer 0:4a2e5f0422d6 21 """
screamer 0:4a2e5f0422d6 22 import sys
screamer 0:4a2e5f0422d6 23 from copy import copy
screamer 0:4a2e5f0422d6 24 from os import walk, remove, makedirs
screamer 0:4a2e5f0422d6 25 from os.path import join, abspath, dirname, relpath, exists, isfile
screamer 0:4a2e5f0422d6 26 from shutil import copyfile
screamer 0:4a2e5f0422d6 27 from optparse import OptionParser
screamer 0:4a2e5f0422d6 28 import re
screamer 0:4a2e5f0422d6 29 import string
screamer 0:4a2e5f0422d6 30
screamer 0:4a2e5f0422d6 31 ROOT = abspath(join(dirname(__file__), ".."))
screamer 0:4a2e5f0422d6 32 sys.path.insert(0, ROOT)
screamer 0:4a2e5f0422d6 33
screamer 0:4a2e5f0422d6 34 from workspace_tools.settings import MBED_ORG_PATH, MBED_ORG_USER, BUILD_DIR
screamer 0:4a2e5f0422d6 35 from workspace_tools.paths import LIB_DIR
screamer 0:4a2e5f0422d6 36 from workspace_tools.utils import run_cmd
screamer 0:4a2e5f0422d6 37
screamer 0:4a2e5f0422d6 38 MBED_URL = "mbed.org"
screamer 0:4a2e5f0422d6 39 MBED_USER = "mbed_official"
screamer 0:4a2e5f0422d6 40
screamer 0:4a2e5f0422d6 41 changed = []
screamer 0:4a2e5f0422d6 42 push_remote = True
screamer 0:4a2e5f0422d6 43 quiet = False
screamer 0:4a2e5f0422d6 44 commit_msg = ''
screamer 0:4a2e5f0422d6 45
screamer 0:4a2e5f0422d6 46 # Code that does have a mirror in the mbed SDK
screamer 0:4a2e5f0422d6 47 # Tuple data: (repo_name, list_of_code_dirs, [team])
screamer 0:4a2e5f0422d6 48 # team is optional - if not specified, the code is published under mbed_official
screamer 0:4a2e5f0422d6 49 OFFICIAL_CODE = (
screamer 0:4a2e5f0422d6 50 ("mbed-dev" , "mbed"),
screamer 0:4a2e5f0422d6 51 ("mbed-rtos", "rtos"),
screamer 0:4a2e5f0422d6 52 ("mbed-dsp" , "dsp"),
screamer 0:4a2e5f0422d6 53 ("mbed-rpc" , "rpc"),
screamer 0:4a2e5f0422d6 54
screamer 0:4a2e5f0422d6 55 ("lwip" , "net/lwip/lwip"),
screamer 0:4a2e5f0422d6 56 ("lwip-sys", "net/lwip/lwip-sys"),
screamer 0:4a2e5f0422d6 57 ("Socket" , "net/lwip/Socket"),
screamer 0:4a2e5f0422d6 58
screamer 0:4a2e5f0422d6 59 ("lwip-eth" , "net/eth/lwip-eth"),
screamer 0:4a2e5f0422d6 60 ("EthernetInterface", "net/eth/EthernetInterface"),
screamer 0:4a2e5f0422d6 61
screamer 0:4a2e5f0422d6 62 ("USBDevice", "USBDevice"),
screamer 0:4a2e5f0422d6 63 ("USBHost" , "USBHost"),
screamer 0:4a2e5f0422d6 64
screamer 0:4a2e5f0422d6 65 ("CellularModem", "net/cellular/CellularModem"),
screamer 0:4a2e5f0422d6 66 ("CellularUSBModem", "net/cellular/CellularUSBModem"),
screamer 0:4a2e5f0422d6 67 ("UbloxUSBModem", "net/cellular/UbloxUSBModem"),
screamer 0:4a2e5f0422d6 68 ("UbloxModemHTTPClientTest", ["tests/net/cellular/http/common", "tests/net/cellular/http/ubloxusb"]),
screamer 0:4a2e5f0422d6 69 ("UbloxModemSMSTest", ["tests/net/cellular/sms/common", "tests/net/cellular/sms/ubloxusb"]),
screamer 0:4a2e5f0422d6 70 ("FATFileSystem", "fs/fat", "mbed-official"),
screamer 0:4a2e5f0422d6 71 )
screamer 0:4a2e5f0422d6 72
screamer 0:4a2e5f0422d6 73
screamer 0:4a2e5f0422d6 74 # Code that does have dependencies to libraries should point to
screamer 0:4a2e5f0422d6 75 # the latest revision. By default, they point to a specific revision.
screamer 0:4a2e5f0422d6 76 CODE_WITH_DEPENDENCIES = (
screamer 0:4a2e5f0422d6 77 # Libraries
screamer 0:4a2e5f0422d6 78 "EthernetInterface",
screamer 0:4a2e5f0422d6 79
screamer 0:4a2e5f0422d6 80 # RTOS Examples
screamer 0:4a2e5f0422d6 81 "rtos_basic",
screamer 0:4a2e5f0422d6 82 "rtos_isr",
screamer 0:4a2e5f0422d6 83 "rtos_mail",
screamer 0:4a2e5f0422d6 84 "rtos_mutex",
screamer 0:4a2e5f0422d6 85 "rtos_queue",
screamer 0:4a2e5f0422d6 86 "rtos_semaphore",
screamer 0:4a2e5f0422d6 87 "rtos_signals",
screamer 0:4a2e5f0422d6 88 "rtos_timer",
screamer 0:4a2e5f0422d6 89
screamer 0:4a2e5f0422d6 90 # Net Examples
screamer 0:4a2e5f0422d6 91 "TCPEchoClient",
screamer 0:4a2e5f0422d6 92 "TCPEchoServer",
screamer 0:4a2e5f0422d6 93 "TCPSocket_HelloWorld",
screamer 0:4a2e5f0422d6 94 "UDPSocket_HelloWorld",
screamer 0:4a2e5f0422d6 95 "UDPEchoClient",
screamer 0:4a2e5f0422d6 96 "UDPEchoServer",
screamer 0:4a2e5f0422d6 97 "BroadcastReceive",
screamer 0:4a2e5f0422d6 98 "BroadcastSend",
screamer 0:4a2e5f0422d6 99
screamer 0:4a2e5f0422d6 100 # mbed sources
screamer 0:4a2e5f0422d6 101 "mbed-src-program",
screamer 0:4a2e5f0422d6 102 )
screamer 0:4a2e5f0422d6 103
screamer 0:4a2e5f0422d6 104 # A list of regular expressions that will be checked against each directory
screamer 0:4a2e5f0422d6 105 # name and skipped if they match.
screamer 0:4a2e5f0422d6 106 IGNORE_DIRS = (
screamer 0:4a2e5f0422d6 107 )
screamer 0:4a2e5f0422d6 108
screamer 0:4a2e5f0422d6 109 IGNORE_FILES = (
screamer 0:4a2e5f0422d6 110 'COPYING',
screamer 0:4a2e5f0422d6 111 '\.md',
screamer 0:4a2e5f0422d6 112 "\.lib",
screamer 0:4a2e5f0422d6 113 "\.bld"
screamer 0:4a2e5f0422d6 114 )
screamer 0:4a2e5f0422d6 115
screamer 0:4a2e5f0422d6 116 def ignore_path(name, reg_exps):
screamer 0:4a2e5f0422d6 117 for r in reg_exps:
screamer 0:4a2e5f0422d6 118 if re.search(r, name):
screamer 0:4a2e5f0422d6 119 return True
screamer 0:4a2e5f0422d6 120 return False
screamer 0:4a2e5f0422d6 121
screamer 0:4a2e5f0422d6 122 class MbedRepository:
screamer 0:4a2e5f0422d6 123 @staticmethod
screamer 0:4a2e5f0422d6 124 def run_and_print(command, cwd):
screamer 0:4a2e5f0422d6 125 stdout, _, _ = run_cmd(command, wd=cwd, redirect=True)
screamer 0:4a2e5f0422d6 126 print(stdout)
screamer 0:4a2e5f0422d6 127
screamer 0:4a2e5f0422d6 128 def __init__(self, name, team = None):
screamer 0:4a2e5f0422d6 129 self.name = name
screamer 0:4a2e5f0422d6 130 self.path = join(MBED_ORG_PATH, name)
screamer 0:4a2e5f0422d6 131 if team is None:
screamer 0:4a2e5f0422d6 132 self.url = "http://" + MBED_URL + "/users/" + MBED_USER + "/code/%s/"
screamer 0:4a2e5f0422d6 133 else:
screamer 0:4a2e5f0422d6 134 self.url = "http://" + MBED_URL + "/teams/" + team + "/code/%s/"
screamer 0:4a2e5f0422d6 135 if not exists(self.path):
screamer 0:4a2e5f0422d6 136 # Checkout code
screamer 0:4a2e5f0422d6 137 if not exists(MBED_ORG_PATH):
screamer 0:4a2e5f0422d6 138 makedirs(MBED_ORG_PATH)
screamer 0:4a2e5f0422d6 139
screamer 0:4a2e5f0422d6 140 self.run_and_print(['hg', 'clone', self.url % name], cwd=MBED_ORG_PATH)
screamer 0:4a2e5f0422d6 141
screamer 0:4a2e5f0422d6 142 else:
screamer 0:4a2e5f0422d6 143 # Update
screamer 0:4a2e5f0422d6 144 self.run_and_print(['hg', 'pull'], cwd=self.path)
screamer 0:4a2e5f0422d6 145 self.run_and_print(['hg', 'update'], cwd=self.path)
screamer 0:4a2e5f0422d6 146
screamer 0:4a2e5f0422d6 147 def publish(self):
screamer 0:4a2e5f0422d6 148 # The maintainer has to evaluate the changes first and explicitly accept them
screamer 0:4a2e5f0422d6 149 self.run_and_print(['hg', 'addremove'], cwd=self.path)
screamer 0:4a2e5f0422d6 150 stdout, _, _ = run_cmd(['hg', 'status'], wd=self.path)
screamer 0:4a2e5f0422d6 151 if stdout == '':
screamer 0:4a2e5f0422d6 152 print "No changes"
screamer 0:4a2e5f0422d6 153 return False
screamer 0:4a2e5f0422d6 154 print stdout
screamer 0:4a2e5f0422d6 155 if quiet:
screamer 0:4a2e5f0422d6 156 commit = 'Y'
screamer 0:4a2e5f0422d6 157 else:
screamer 0:4a2e5f0422d6 158 commit = raw_input(push_remote and "Do you want to commit and push? Y/N: " or "Do you want to commit? Y/N: ")
screamer 0:4a2e5f0422d6 159 if commit == 'Y':
screamer 0:4a2e5f0422d6 160 args = ['hg', 'commit', '-u', MBED_ORG_USER]
screamer 0:4a2e5f0422d6 161 if commit_msg:
screamer 0:4a2e5f0422d6 162 args = args + ['-m', commit_msg]
screamer 0:4a2e5f0422d6 163 self.run_and_print(args, cwd=self.path)
screamer 0:4a2e5f0422d6 164 if push_remote:
screamer 0:4a2e5f0422d6 165 self.run_and_print(['hg', 'push'], cwd=self.path)
screamer 0:4a2e5f0422d6 166 return True
screamer 0:4a2e5f0422d6 167
screamer 0:4a2e5f0422d6 168 # Check if a file is a text file or a binary file
screamer 0:4a2e5f0422d6 169 # Taken from http://code.activestate.com/recipes/173220/
screamer 0:4a2e5f0422d6 170 text_characters = "".join(map(chr, range(32, 127)) + list("\n\r\t\b"))
screamer 0:4a2e5f0422d6 171 _null_trans = string.maketrans("", "")
screamer 0:4a2e5f0422d6 172 def is_text_file(filename):
screamer 0:4a2e5f0422d6 173 block_size = 1024
screamer 0:4a2e5f0422d6 174 def istext(s):
screamer 0:4a2e5f0422d6 175 if "\0" in s:
screamer 0:4a2e5f0422d6 176 return 0
screamer 0:4a2e5f0422d6 177
screamer 0:4a2e5f0422d6 178 if not s: # Empty files are considered text
screamer 0:4a2e5f0422d6 179 return 1
screamer 0:4a2e5f0422d6 180
screamer 0:4a2e5f0422d6 181 # Get the non-text characters (maps a character to itself then
screamer 0:4a2e5f0422d6 182 # use the 'remove' option to get rid of the text characters.)
screamer 0:4a2e5f0422d6 183 t = s.translate(_null_trans, text_characters)
screamer 0:4a2e5f0422d6 184
screamer 0:4a2e5f0422d6 185 # If more than 30% non-text characters, then
screamer 0:4a2e5f0422d6 186 # this is considered a binary file
screamer 0:4a2e5f0422d6 187 if float(len(t))/len(s) > 0.30:
screamer 0:4a2e5f0422d6 188 return 0
screamer 0:4a2e5f0422d6 189 return 1
screamer 0:4a2e5f0422d6 190 with open(filename) as f:
screamer 0:4a2e5f0422d6 191 res = istext(f.read(block_size))
screamer 0:4a2e5f0422d6 192 return res
screamer 0:4a2e5f0422d6 193
screamer 0:4a2e5f0422d6 194 # Return the line ending type for the given file ('cr' or 'crlf')
screamer 0:4a2e5f0422d6 195 def get_line_endings(f):
screamer 0:4a2e5f0422d6 196 examine_size = 1024
screamer 0:4a2e5f0422d6 197 try:
screamer 0:4a2e5f0422d6 198 tf = open(f, "rb")
screamer 0:4a2e5f0422d6 199 lines, ncrlf = tf.readlines(examine_size), 0
screamer 0:4a2e5f0422d6 200 tf.close()
screamer 0:4a2e5f0422d6 201 for l in lines:
screamer 0:4a2e5f0422d6 202 if l.endswith("\r\n"):
screamer 0:4a2e5f0422d6 203 ncrlf = ncrlf + 1
screamer 0:4a2e5f0422d6 204 return 'crlf' if ncrlf > len(lines) >> 1 else 'cr'
screamer 0:4a2e5f0422d6 205 except:
screamer 0:4a2e5f0422d6 206 return 'cr'
screamer 0:4a2e5f0422d6 207
screamer 0:4a2e5f0422d6 208 # Copy file to destination, but preserve destination line endings if possible
screamer 0:4a2e5f0422d6 209 # This prevents very annoying issues with huge diffs that appear because of
screamer 0:4a2e5f0422d6 210 # differences in line endings
screamer 0:4a2e5f0422d6 211 def copy_with_line_endings(sdk_file, repo_file):
screamer 0:4a2e5f0422d6 212 if not isfile(repo_file):
screamer 0:4a2e5f0422d6 213 copyfile(sdk_file, repo_file)
screamer 0:4a2e5f0422d6 214 return
screamer 0:4a2e5f0422d6 215 is_text = is_text_file(repo_file)
screamer 0:4a2e5f0422d6 216 if is_text:
screamer 0:4a2e5f0422d6 217 sdk_le = get_line_endings(sdk_file)
screamer 0:4a2e5f0422d6 218 repo_le = get_line_endings(repo_file)
screamer 0:4a2e5f0422d6 219 if not is_text or sdk_le == repo_le:
screamer 0:4a2e5f0422d6 220 copyfile(sdk_file, repo_file)
screamer 0:4a2e5f0422d6 221 else:
screamer 0:4a2e5f0422d6 222 print "Converting line endings in '%s' to '%s'" % (abspath(repo_file), repo_le)
screamer 0:4a2e5f0422d6 223 f = open(sdk_file, "rb")
screamer 0:4a2e5f0422d6 224 data = f.read()
screamer 0:4a2e5f0422d6 225 f.close()
screamer 0:4a2e5f0422d6 226 f = open(repo_file, "wb")
screamer 0:4a2e5f0422d6 227 data = data.replace("\r\n", "\n") if repo_le == 'cr' else data.replace('\n','\r\n')
screamer 0:4a2e5f0422d6 228 f.write(data)
screamer 0:4a2e5f0422d6 229 f.close()
screamer 0:4a2e5f0422d6 230
screamer 0:4a2e5f0422d6 231 def visit_files(path, visit):
screamer 0:4a2e5f0422d6 232 for root, dirs, files in walk(path):
screamer 0:4a2e5f0422d6 233 # Ignore hidden directories
screamer 0:4a2e5f0422d6 234 for d in copy(dirs):
screamer 0:4a2e5f0422d6 235 full = join(root, d)
screamer 0:4a2e5f0422d6 236 if d.startswith('.'):
screamer 0:4a2e5f0422d6 237 dirs.remove(d)
screamer 0:4a2e5f0422d6 238 if ignore_path(full, IGNORE_DIRS):
screamer 0:4a2e5f0422d6 239 print "Skipping '%s'" % full
screamer 0:4a2e5f0422d6 240 dirs.remove(d)
screamer 0:4a2e5f0422d6 241
screamer 0:4a2e5f0422d6 242 for file in files:
screamer 0:4a2e5f0422d6 243 if ignore_path(file, IGNORE_FILES):
screamer 0:4a2e5f0422d6 244 continue
screamer 0:4a2e5f0422d6 245
screamer 0:4a2e5f0422d6 246 visit(join(root, file))
screamer 0:4a2e5f0422d6 247
screamer 0:4a2e5f0422d6 248
screamer 0:4a2e5f0422d6 249 def update_repo(repo_name, sdk_paths, team_name):
screamer 0:4a2e5f0422d6 250 repo = MbedRepository(repo_name, team_name)
screamer 0:4a2e5f0422d6 251 # copy files from mbed SDK to mbed_official repository
screamer 0:4a2e5f0422d6 252 def visit_mbed_sdk(sdk_file):
screamer 0:4a2e5f0422d6 253 repo_file = join(repo.path, relpath(sdk_file, sdk_path))
screamer 0:4a2e5f0422d6 254
screamer 0:4a2e5f0422d6 255 repo_dir = dirname(repo_file)
screamer 0:4a2e5f0422d6 256 if not exists(repo_dir):
screamer 0:4a2e5f0422d6 257 makedirs(repo_dir)
screamer 0:4a2e5f0422d6 258
screamer 0:4a2e5f0422d6 259 copy_with_line_endings(sdk_file, repo_file)
screamer 0:4a2e5f0422d6 260 for sdk_path in sdk_paths:
screamer 0:4a2e5f0422d6 261 visit_files(sdk_path, visit_mbed_sdk)
screamer 0:4a2e5f0422d6 262
screamer 0:4a2e5f0422d6 263 # remove repository files that do not exist in the mbed SDK
screamer 0:4a2e5f0422d6 264 def visit_repo(repo_file):
screamer 0:4a2e5f0422d6 265 for sdk_path in sdk_paths:
screamer 0:4a2e5f0422d6 266 sdk_file = join(sdk_path, relpath(repo_file, repo.path))
screamer 0:4a2e5f0422d6 267 if exists(sdk_file):
screamer 0:4a2e5f0422d6 268 break
screamer 0:4a2e5f0422d6 269 else:
screamer 0:4a2e5f0422d6 270 remove(repo_file)
screamer 0:4a2e5f0422d6 271 print "remove: %s" % repo_file
screamer 0:4a2e5f0422d6 272 visit_files(repo.path, visit_repo)
screamer 0:4a2e5f0422d6 273
screamer 0:4a2e5f0422d6 274 if repo.publish():
screamer 0:4a2e5f0422d6 275 changed.append(repo_name)
screamer 0:4a2e5f0422d6 276
screamer 0:4a2e5f0422d6 277
screamer 0:4a2e5f0422d6 278 def update_code(repositories):
screamer 0:4a2e5f0422d6 279 for r in repositories:
screamer 0:4a2e5f0422d6 280 repo_name, sdk_dir = r[0], r[1]
screamer 0:4a2e5f0422d6 281 team_name = r[2] if len(r) == 3 else None
screamer 0:4a2e5f0422d6 282 print '\n=== Updating "%s" ===' % repo_name
screamer 0:4a2e5f0422d6 283 sdk_dirs = [sdk_dir] if type(sdk_dir) != type([]) else sdk_dir
screamer 0:4a2e5f0422d6 284 sdk_path = [join(LIB_DIR, d) for d in sdk_dirs]
screamer 0:4a2e5f0422d6 285 update_repo(repo_name, sdk_path, team_name)
screamer 0:4a2e5f0422d6 286
screamer 0:4a2e5f0422d6 287 def update_single_repo(repo):
screamer 0:4a2e5f0422d6 288 repos = [r for r in OFFICIAL_CODE if r[0] == repo]
screamer 0:4a2e5f0422d6 289 if not repos:
screamer 0:4a2e5f0422d6 290 print "Repository '%s' not found" % repo
screamer 0:4a2e5f0422d6 291 else:
screamer 0:4a2e5f0422d6 292 update_code(repos)
screamer 0:4a2e5f0422d6 293
screamer 0:4a2e5f0422d6 294 def update_dependencies(repositories):
screamer 0:4a2e5f0422d6 295 for repo_name in repositories:
screamer 0:4a2e5f0422d6 296 print '\n=== Updating "%s" ===' % repo_name
screamer 0:4a2e5f0422d6 297 repo = MbedRepository(repo_name)
screamer 0:4a2e5f0422d6 298
screamer 0:4a2e5f0422d6 299 # point to the latest libraries
screamer 0:4a2e5f0422d6 300 def visit_repo(repo_file):
screamer 0:4a2e5f0422d6 301 with open(repo_file, "r") as f:
screamer 0:4a2e5f0422d6 302 url = f.read()
screamer 0:4a2e5f0422d6 303 with open(repo_file, "w") as f:
screamer 0:4a2e5f0422d6 304 f.write(url[:(url.rindex('/')+1)])
screamer 0:4a2e5f0422d6 305 visit_files(repo.path, visit_repo, None, MBED_REPO_EXT)
screamer 0:4a2e5f0422d6 306
screamer 0:4a2e5f0422d6 307 if repo.publish():
screamer 0:4a2e5f0422d6 308 changed.append(repo_name)
screamer 0:4a2e5f0422d6 309
screamer 0:4a2e5f0422d6 310
screamer 0:4a2e5f0422d6 311 def update_mbed():
screamer 0:4a2e5f0422d6 312 update_repo("mbed", [join(BUILD_DIR, "mbed")], None)
screamer 0:4a2e5f0422d6 313
screamer 0:4a2e5f0422d6 314 def do_sync(options):
screamer 0:4a2e5f0422d6 315 global push_remote, quiet, commit_msg, changed
screamer 0:4a2e5f0422d6 316
screamer 0:4a2e5f0422d6 317 push_remote = not options.nopush
screamer 0:4a2e5f0422d6 318 quiet = options.quiet
screamer 0:4a2e5f0422d6 319 commit_msg = options.msg
screamer 0:4a2e5f0422d6 320 chnaged = []
screamer 0:4a2e5f0422d6 321
screamer 0:4a2e5f0422d6 322 if options.code:
screamer 0:4a2e5f0422d6 323 update_code(OFFICIAL_CODE)
screamer 0:4a2e5f0422d6 324
screamer 0:4a2e5f0422d6 325 if options.dependencies:
screamer 0:4a2e5f0422d6 326 update_dependencies(CODE_WITH_DEPENDENCIES)
screamer 0:4a2e5f0422d6 327
screamer 0:4a2e5f0422d6 328 if options.mbed:
screamer 0:4a2e5f0422d6 329 update_mbed()
screamer 0:4a2e5f0422d6 330
screamer 0:4a2e5f0422d6 331 if options.repo:
screamer 0:4a2e5f0422d6 332 update_single_repo(options.repo)
screamer 0:4a2e5f0422d6 333
screamer 0:4a2e5f0422d6 334 if changed:
screamer 0:4a2e5f0422d6 335 print "Repositories with changes:", changed
screamer 0:4a2e5f0422d6 336
screamer 0:4a2e5f0422d6 337 return changed
screamer 0:4a2e5f0422d6 338
screamer 0:4a2e5f0422d6 339 if __name__ == '__main__':
screamer 0:4a2e5f0422d6 340 parser = OptionParser()
screamer 0:4a2e5f0422d6 341
screamer 0:4a2e5f0422d6 342 parser.add_option("-c", "--code",
screamer 0:4a2e5f0422d6 343 action="store_true", default=False,
screamer 0:4a2e5f0422d6 344 help="Update the mbed_official code")
screamer 0:4a2e5f0422d6 345
screamer 0:4a2e5f0422d6 346 parser.add_option("-d", "--dependencies",
screamer 0:4a2e5f0422d6 347 action="store_true", default=False,
screamer 0:4a2e5f0422d6 348 help="Update the mbed_official code dependencies")
screamer 0:4a2e5f0422d6 349
screamer 0:4a2e5f0422d6 350 parser.add_option("-m", "--mbed",
screamer 0:4a2e5f0422d6 351 action="store_true", default=False,
screamer 0:4a2e5f0422d6 352 help="Release a build of the mbed library")
screamer 0:4a2e5f0422d6 353
screamer 0:4a2e5f0422d6 354 parser.add_option("-n", "--nopush",
screamer 0:4a2e5f0422d6 355 action="store_true", default=False,
screamer 0:4a2e5f0422d6 356 help="Commit the changes locally only, don't push them")
screamer 0:4a2e5f0422d6 357
screamer 0:4a2e5f0422d6 358 parser.add_option("", "--commit_message",
screamer 0:4a2e5f0422d6 359 action="store", type="string", default='', dest='msg',
screamer 0:4a2e5f0422d6 360 help="Commit message to use for all the commits")
screamer 0:4a2e5f0422d6 361
screamer 0:4a2e5f0422d6 362 parser.add_option("-r", "--repository",
screamer 0:4a2e5f0422d6 363 action="store", type="string", default='', dest='repo',
screamer 0:4a2e5f0422d6 364 help="Synchronize only the given repository")
screamer 0:4a2e5f0422d6 365
screamer 0:4a2e5f0422d6 366 parser.add_option("-q", "--quiet",
screamer 0:4a2e5f0422d6 367 action="store_true", default=False,
screamer 0:4a2e5f0422d6 368 help="Don't ask for confirmation before commiting or pushing")
screamer 0:4a2e5f0422d6 369
screamer 0:4a2e5f0422d6 370 (options, args) = parser.parse_args()
screamer 0:4a2e5f0422d6 371
screamer 0:4a2e5f0422d6 372 do_sync(options)
screamer 0:4a2e5f0422d6 373