| Index: tools/dartium/fetch_dartium.py
|
| diff --git a/tools/dartium/fetch_dartium.py b/tools/dartium/fetch_dartium.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..4f6ed3280b9a21ba011801f178f2fc6ccd1445f4
|
| --- /dev/null
|
| +++ b/tools/dartium/fetch_dartium.py
|
| @@ -0,0 +1,142 @@
|
| +#!/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.
|
| +#
|
| +# Note: this checkout is not suitable for git merges across branches
|
| +# (e.g., upstream merges). It's a shallow checkout without history.
|
| +#
|
| +# 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
|
| + if not path:
|
| + print 'Please set a path'
|
| + exit(1)
|
| + path = os.path.expanduser(path)
|
| + 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'])
|
| + 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()
|
|
|