Chromium Code Reviews| Index: tools/dartium/fetch_dartium.py |
| diff --git a/tools/dartium/fetch_dartium.py b/tools/dartium/fetch_dartium.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..89a367c459cd9fe8a852f5db44ebbefd054dd283 |
| --- /dev/null |
| +++ b/tools/dartium/fetch_dartium.py |
| @@ -0,0 +1,138 @@ |
| +#!/usr/bin/python |
| +# |
| +# Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| +# for details. All rights reserved. Use of this source code is governed by a |
| +# BSD-style license that can be found in the LICENSE file. |
| + |
| +# A script to fetch and build dartium branches into an empty directory. |
| +# |
| +# Main dev directories - src, src/third_party/WebKit, src/dart - are checked out |
| +# via git. A custom_deps entry is added to the .gclient file. |
| +# |
| +# Usage: |
| +# .../fetch_dartium.py --branch=[trunk|bleeding_edge|dartium_integration|1.4|...] |
| +# --path=path [--build] |
| +# |
| +# Default branch is bleeding_edge. The path must be created by this script. |
| + |
| +import optparse |
| +import os |
| +import os.path |
| +import re |
| +import shutil |
| +import subprocess |
| +import sys |
| + |
| +def Run(cmd, path = '.', isPiped = False): |
| + print 'Running in ' + path + ': ' + ' '.join(cmd) |
| + cwd = os.getcwd() |
| + os.chdir(path) |
| + if isPiped: |
| + p = subprocess.Popen(cmd, stdout = subprocess.PIPE) |
| + else: |
| + p = subprocess.Popen(cmd) |
| + os.chdir(cwd) |
| + return p |
| + |
| +def RunSync(cmd): |
| + print "\n[%s]\n$ %s" % (os.getcwd(), " ".join(cmd)) |
| + pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
| + output = pipe.communicate() |
| + if pipe.returncode == 0: |
| + return output[0] |
| + else: |
| + print output[1] |
| + print "FAILED. RET_CODE=%d" % pipe.returncode |
| + sys.exit(pipe.returncode) |
| + |
| + |
| +def main(): |
| + option_parser = optparse.OptionParser() |
| + option_parser.add_option('', '--branch', help="Checkout a branch of Dartium, e.g., [bleeding_edge|dartium_integration|trunk|1.4]", |
| + action="store", dest="branch", default="bleeding_edge") |
| + option_parser.add_option('', '--build', help="Compile", |
| + action="store_true", dest="build") |
| + option_parser.add_option('', '--path', help="Path to checkout to", |
| + action="store", dest="path", default=None) |
| + options, args = option_parser.parse_args() |
| + |
| + path = options.path |
|
terry
2014/07/18 13:33:03
My path is '/usr/local/google/home/terry' couldn't
vsm
2014/07/29 14:48:42
Done.
|
| + if not path: |
| + print 'Please set a path' |
| + exit(1) |
| + if os.path.isfile(path) or os.path.isdir(path): |
| + print 'Path %s already exists' % path |
| + os.mkdir(path) |
| + os.chdir(path) |
| + |
| + if options.branch != 'trunk': |
| + branch = 'branches/' + options.branch |
| + else: |
| + branch = 'trunk' |
| + deps_path = 'https://dart.googlecode.com/svn/%s/deps/dartium.deps' % branch |
| + |
| + Run(['gclient', 'config', deps_path]).wait() |
| + |
| + # Mark chrome, blink, and dart as custom. We'll check them out separately |
| + # via git. |
| + f = open('.gclient', 'r') |
| + lines = f.readlines() |
| + f.close() |
| + f = open('.gclient', 'w') |
| + for line in lines: |
| + f.write(line) |
| + if 'custom_deps' in line: |
| + f.write( |
| + ' "src": None,\n' |
| + ' "src/third_party/WebKit": None,\n' |
| + ' "src/dart": None,\n' |
| + ) |
| + f.close() |
| + |
| + # Find branches from the DEPS file. |
| + DEPS = RunSync(['svn', 'cat', deps_path + '/DEPS']) |
| + chrome_base = 'svn://svn.chromium.org/' |
| + chrome_branch = re.search('dartium_chromium_branch":\s*"(.+)"', DEPS).group(1) |
| + blink_branch = re.search('dartium_webkit_branch":\s*"(.+)"', DEPS).group(1) |
| + dart_base = 'https://dart.googlecode.com/svn/' |
| + dart_branch = re.search('dart_branch":\s*"(.+)"', DEPS).group(1) |
| + |
| + chrome_url = chrome_base + chrome_branch |
| + blink_url = chrome_base + blink_branch |
| + dart_url = dart_base + dart_branch + '/dart' |
| + |
| + # Fetch dart, chrome, and blink via git-svn and everything else via |
| + # gclient sync. |
| + blink_fetch = Run(['git', 'svn', 'clone', '-rHEAD', blink_url, 'blink']) |
|
rmacnak
2014/07/18 18:27:16
These are shallow checkouts without the other bran
vsm
2014/07/29 14:48:42
Comment added at the top. I use this to get going
|
| + dart_fetch = Run(['git', 'svn', 'clone', '-rHEAD', dart_url, 'dart']) |
| + Run(['git', 'svn', 'clone', '-rHEAD', chrome_url, 'src']).wait() |
| + sync = Run(['gclient', 'sync', '--nohooks']) |
| + ps = [blink_fetch, dart_fetch, sync] |
| + |
| + # Spin until everything is done. |
| + while True: |
| + ps_status = [p.poll() for p in ps] |
| + if all([x is not None for x in ps_status]): |
| + break |
| + |
| + # Move blink and dart to the right locations. |
| + webkit_relative_path = os.path.join('src', 'third_party', 'WebKit') |
| + if os.path.isdir(webkit_relative_path): |
| + shutil.rmtree(webkit_relative_path) |
| + Run(['mv', 'blink', webkit_relative_path]).wait() |
| + dart_relative_path = os.path.join('src', 'dart') |
| + if os.path.isdir(dart_relative_path): |
| + shutil.rmtree(dart_relative_path) |
| + Run(['mv', 'dart', dart_relative_path]).wait() |
| + os.chdir('src') |
| + |
| + # Sync again and runhooks. |
| + Run(['gclient', 'sync']).wait() |
| + Run(['gclient', 'runhooks']).wait() |
| + |
| + # Build if requested. |
| + if options.build: |
| + Run([os.path.join('.', 'dart', 'tools', 'dartium', 'build.py'), '--mode=Release']) |
| + |
| +if '__main__' == __name__: |
| + main() |