| #!/usr/bin/python2.6 |
| # |
| # Copyright 2010 Google Inc. All Rights Reserved. |
| |
| """Script to checkout the ChromeOS source. |
| |
| This script sets up the ChromeOS source in the given directory, matching a |
| particular release of ChromeOS. |
| """ |
| |
| __author__ = "raymes@google.com (Raymes Khoury)" |
| |
| import optparse |
| import os |
| import sys |
| from utils import utils |
| |
| GCLIENT_FILE = """solutions = [ |
| { "name" : "CHROME_DEPS", |
| "url" : |
| "svn://svn.chromium.org/chrome-internal/trunk/tools/buildspec/releases/%s", |
| "custom_deps" : { |
| "src/third_party/WebKit/LayoutTests": None, |
| "src-pdf": None, |
| "src/pdf": None, |
| }, |
| "safesync_url": "", |
| }, |
| ] |
| """ |
| |
| # Common initializations |
| (rootdir, basename) = utils.GetRoot(sys.argv[0]) |
| utils.InitLogger(rootdir, basename) |
| |
| |
| GIT_TAGS_CMD = ("git ls-remote --tags " |
| "ssh://git@gitrw.chromium.org:9222/chromiumos-overlay.git | " |
| "grep refs/tags/ | grep '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | " |
| "cut -d '/' -f 3 | sort -nr") |
| |
| |
| def StoreFile(filename, contents): |
| f = open(filename, "w") |
| f.write(contents) |
| f.close() |
| |
| |
| def Usage(parser): |
| parser.print_help() |
| sys.exit(0) |
| |
| |
| def GetTags(): |
| res = utils.RunCommand(GIT_TAGS_CMD, True) |
| return res[1].strip().split("\n") |
| |
| |
| def Main(): |
| """Checkout the ChromeOS source.""" |
| parser = optparse.OptionParser() |
| parser.add_option("--dir", dest="directory", |
| help="Target directory for ChromeOS installation.") |
| parser.add_option("--version", dest="version", |
| help="""ChromeOS version. Can be: (1) A release version |
| in the format: 'X.X.X.X' (2) 'latest' for the latest release version or (3) |
| 'top' for top of trunk. Default is 'latest'""") |
| |
| tags = GetTags() |
| |
| options = parser.parse_args()[0] |
| |
| if options.version == "latest": |
| version = tags[0] |
| print version |
| elif options.version == "top": |
| version = "top" |
| elif options.version is None: |
| Usage(parser) |
| else: |
| version = options.version.strip() |
| |
| if not version in tags and version != "top": |
| print "Version: '" + version + "' does not exist" |
| Usage(parser) |
| |
| if options.directory is None: |
| print "Please give a valid directory" |
| Usage(parser) |
| |
| directory = options.directory.strip() |
| |
| if version == "top": |
| branch = "master" |
| else: |
| branch = ".".join(version.split(".")[0:-1]) + ".B" |
| |
| # Don't checkout chrome sources outside the chroot at the moment. |
| # If we check them out outside, we can't do some things, like build tests. |
| checkout_chrome_outside_chroot = False |
| |
| commands = [] |
| commands.append("mkdir -p " + directory) |
| commands.append("cd " + directory) |
| commands.append("repo init -u " |
| "ssh://git@gitrw.chromium.org:9222/manifest-internal -b " |
| + branch) |
| commands.append("repo sync -j10") |
| if branch != "master": |
| commands.append("repo forall -c 'git checkout -f -b %s %s'" |
| % (branch, version)) |
| utils.RunCommands(commands) |
| |
| commands = [] |
| commands.append("cd " + directory + "/src/scripts") |
| commands.append("./get_svn_repos.sh") |
| utils.RunCommands(commands) |
| |
| # Setup svn credentials for use inside the chroot |
| utils.RunCommand("svn ls --config-option config:auth:password-stores= " |
| "--config-option " |
| "servers:global:store-plaintext-passwords=yes " |
| "--username $USER@google.com " |
| "svn://svn.chromium.org/leapfrog-internal " |
| "svn://svn.chromium.org/chrome " |
| "svn://svn.chromium.org/chrome-internal > /dev/null") |
| |
| if checkout_chrome_outside_chroot: |
| # Find Chrome browser version |
| chrome_version = utils.RunCommand("%s/src/scripts/chromeos_version.sh | " |
| "grep CHROME_BUILD" % directory, True) |
| |
| chrome_version = chrome_version[1].strip().split("=") |
| if len(chrome_version) == 2: |
| chrome_version = chrome_version[1] |
| else: |
| chrome_version = "" |
| |
| # Checkout chrome |
| utils.RunCommand("mkdir -p %s/chrome_browser/" % directory) |
| gclient_file = GCLIENT_FILE % chrome_version |
| StoreFile(os.path.expanduser("%s/chrome_browser/.gclient" |
| % directory), gclient_file) |
| commands = [] |
| commands.append("cd " + options.directory) |
| commands.append("cd chrome_browser") |
| commands.append("gclient sync -v --nohooks --delete_unversioned_trees") |
| utils.RunCommands(commands) |
| |
| print "Done" |
| |
| |
| if __name__ == "__main__": |
| Main() |