| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 import optparse | 6 import optparse |
| 7 import os | 7 import os |
| 8 import os.path | 8 import os.path |
| 9 import re | 9 import re |
| 10 import requests |
| 10 import shutil | 11 import shutil |
| 11 import subprocess | 12 import subprocess |
| 12 import sys | 13 import sys |
| 13 import tempfile | 14 import tempfile |
| 14 | 15 |
| 15 SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__)) | 16 SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__)) |
| 16 DART_PATH = os.path.abspath(os.path.join(SCRIPT_PATH, '..', '..', '..')) | 17 DART_PATH = os.path.abspath(os.path.join(SCRIPT_PATH, '..', '..', '..')) |
| 17 | 18 |
| 18 # Dartium DEPS file with Chrome and WebKit revisions. | 19 # Dartium DEPS file from the DEPS file checked into the dart-lang/sdk integratio
n |
| 19 DEPS = ('http://dart.googlecode.com/svn/branches/' | 20 # branch. |
| 20 'bleeding_edge/deps/dartium.deps/DEPS') | 21 DEPS_GIT = ('https://raw.githubusercontent.com/dart-lang/sdk/' |
| 22 'integration/tools/deps/dartium.deps/DEPS') |
| 21 | 23 |
| 22 # Whitelist of files to keep. | 24 # Whitelist of files to keep. |
| 23 WHITELIST = [ | 25 WHITELIST = [ |
| 24 r'LICENSE(\S+)', | 26 r'LICENSE(\S+)', |
| 25 r'(\S+)\.idl', | 27 r'(\S+)\.idl', |
| 26 r'(\S+)\.json', | 28 r'(\S+)\.json', |
| 27 r'(\S+)\.py', | 29 r'(\S+)\.py', |
| 28 r'(\S+)\.txt', | 30 r'(\S+)\.txt', |
| 29 ] | 31 ] |
| 30 | 32 |
| 31 # WebKit / WebCore info. | 33 # WebKit / WebCore info. |
| 32 CHROME_TRUNK = "http://src.chromium.org" | 34 CHROME_TRUNK = "https://src.chromium.org" |
| 33 WEBKIT_URL_PATTERN = r'"dartium_webkit_branch": "(\S+)",' | 35 WEBKIT_URL_PATTERN = r'"dartium_webkit_branch": "(\S+)",' |
| 34 WEBKIT_REV_PATTERN = r'"dartium_webkit_revision": "(\d+)",' | 36 WEBKIT_REV_PATTERN = r'"dartium_webkit_revision": "(\d+)",' |
| 35 WEBCORE_SUBPATH = 'Source/core' | 37 WEBCORE_SUBPATH = 'Source/core' |
| 36 MODULES_SUBPATH = 'Source/modules' | 38 MODULES_SUBPATH = 'Source/modules' |
| 37 BINDINGS_SUBPATH = 'Source/bindings' | 39 BINDINGS_SUBPATH = 'Source/bindings' |
| 38 | 40 |
| 39 LOCAL_WEBKIT_IDL_PATH = os.path.join(DART_PATH, 'third_party', 'WebCore') | 41 LOCAL_WEBKIT_IDL_PATH = os.path.join(DART_PATH, 'third_party', 'WebCore') |
| 40 LOCAL_WEBKIT_README = """\ | 42 LOCAL_WEBKIT_README = """\ |
| 41 This directory contains a copy of WebKit/WebCore IDL files. | 43 This directory contains a copy of WebKit/WebCore IDL files. |
| 42 See the attached LICENSE-* files in this directory. | 44 See the attached LICENSE-* files in this directory. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 Please see the corresponding LICENSE file at | 79 Please see the corresponding LICENSE file at |
| 78 %(url)s/trunk/src/LICENSE. | 80 %(url)s/trunk/src/LICENSE. |
| 79 """ | 81 """ |
| 80 DEPTH_FILES = 'files' | 82 DEPTH_FILES = 'files' |
| 81 DEPTH_INFINITY = 'infinity' | 83 DEPTH_INFINITY = 'infinity' |
| 82 | 84 |
| 83 # Regular expressions corresponding to URL/revision patters in the | 85 # Regular expressions corresponding to URL/revision patters in the |
| 84 # DEPS file. | 86 # DEPS file. |
| 85 DEPS_PATTERNS = { | 87 DEPS_PATTERNS = { |
| 86 'webkit': (CHROME_TRUNK, WEBKIT_URL_PATTERN, WEBKIT_REV_PATTERN), | 88 'webkit': (CHROME_TRUNK, WEBKIT_URL_PATTERN, WEBKIT_REV_PATTERN), |
| 87 'chrome': (CHROME_TRUNK, CHROME_URL_PATTERN, CHROME_REV_PATTERN), | 89 # 'chrome': (CHROME_TRUNK, CHROME_URL_PATTERN, CHROME_REV_PATTERN), |
| 88 } | 90 } |
| 89 | 91 |
| 90 # List of components to update. | 92 # List of components to update. |
| 91 UPDATE_LIST = [ | 93 UPDATE_LIST = [ |
| 92 # (component, remote subpath, local path, local readme file, depth) | 94 # (component, remote subpath, local path, local readme file, depth) |
| 93 | 95 |
| 94 # WebKit IDL. | 96 # WebKit IDL. |
| 95 ('webkit', WEBCORE_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'core'), | 97 ('webkit', WEBCORE_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'core'), |
| 96 LOCAL_WEBKIT_README, DEPTH_INFINITY), | 98 LOCAL_WEBKIT_README, DEPTH_INFINITY), |
| 97 ('webkit', MODULES_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'modules'), | 99 ('webkit', MODULES_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'modules'), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 123 print ' '.join(cmd) | 125 print ' '.join(cmd) |
| 124 pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | 126 pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
| 125 output = pipe.communicate() | 127 output = pipe.communicate() |
| 126 if pipe.returncode in valid_exits: | 128 if pipe.returncode in valid_exits: |
| 127 return output[0] | 129 return output[0] |
| 128 else: | 130 else: |
| 129 print output[1] | 131 print output[1] |
| 130 print 'FAILED. RET_CODE=%d' % pipe.returncode | 132 print 'FAILED. RET_CODE=%d' % pipe.returncode |
| 131 sys.exit(pipe.returncode) | 133 sys.exit(pipe.returncode) |
| 132 | 134 |
| 133 | 135 def GetDepsFromGit(): |
| 134 def GetDeps(): | 136 req = requests.get(DEPS_GIT) |
| 135 """Returns the DEPS file contents with pinned revision info.""" | 137 return req.text |
| 136 return RunCommand(['svn', 'cat', DEPS]) | |
| 137 | |
| 138 | 138 |
| 139 def GetSvnRevision(deps, component): | 139 def GetSvnRevision(deps, component): |
| 140 """Returns a tuple with the (dartium webkit repo, latest revision).""" | 140 """Returns a tuple with the (dartium webkit repo, latest revision).""" |
| 141 url_base, url_pattern, rev_pattern = DEPS_PATTERNS[component] | 141 url_base, url_pattern, rev_pattern = DEPS_PATTERNS[component] |
| 142 url = url_base + re.search(url_pattern, deps).group(1) | 142 url = url_base + re.search(url_pattern, deps).group(1) |
| 143 revision = re.search(rev_pattern, deps).group(1) | 143 revision = re.search(rev_pattern, deps).group(1) |
| 144 return (url, revision) | 144 return (url, revision) |
| 145 | 145 |
| 146 | 146 |
| 147 def RefreshFiles(url, revision, remote_path, local_path, depth): | 147 def RefreshFiles(url, revision, remote_path, local_path, depth): |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 if os.path.exists(archive_path): | 201 if os.path.exists(archive_path): |
| 202 RunCommand(['unzip', ZIP_ARCHIVE, '-d', '.']) | 202 RunCommand(['unzip', ZIP_ARCHIVE, '-d', '.']) |
| 203 RunCommand(['rm', ZIP_ARCHIVE]) | 203 RunCommand(['rm', ZIP_ARCHIVE]) |
| 204 | 204 |
| 205 def ParseOptions(): | 205 def ParseOptions(): |
| 206 parser = optparse.OptionParser() | 206 parser = optparse.OptionParser() |
| 207 parser.add_option('--webkit-revision', '-w', dest='webkit_revision', | 207 parser.add_option('--webkit-revision', '-w', dest='webkit_revision', |
| 208 help='WebKit IDL revision to install', default=None) | 208 help='WebKit IDL revision to install', default=None) |
| 209 parser.add_option('--chrome-revision', '-c', dest='chrome_revision', | 209 parser.add_option('--chrome-revision', '-c', dest='chrome_revision', |
| 210 help='Chrome IDL revision to install', default=None) | 210 help='Chrome IDL revision to install', default=None) |
| 211 parser.add_option('--update', '-u', dest='update', | |
| 212 help='IDL to update (webkit | chrome | all)', | |
| 213 default='webkit') | |
| 214 args, _ = parser.parse_args() | 211 args, _ = parser.parse_args() |
| 215 update = {} | 212 update = {} |
| 216 if args.update == 'all' or args.update == 'chrome': | 213 update['webkit'] = args.webkit_revision |
| 217 update['chrome'] = args.chrome_revision | |
| 218 if args.update == 'all' or args.update == 'webkit': | |
| 219 update['webkit'] = args.webkit_revision | |
| 220 return update | 214 return update |
| 221 | 215 |
| 222 | 216 |
| 223 def main(): | 217 def main(): |
| 224 deps = GetDeps() | |
| 225 update = ParseOptions() | 218 update = ParseOptions() |
| 219 deps = GetDepsFromGit() |
| 226 for (component, remote_path, local_path, readme, depth) in UPDATE_LIST: | 220 for (component, remote_path, local_path, readme, depth) in UPDATE_LIST: |
| 227 if component in update.keys(): | 221 if component in update.keys(): |
| 228 revision = update[component] | 222 revision = update[component] |
| 229 url, latest = GetSvnRevision(deps, component) | 223 url, latest = GetSvnRevision(deps, component) |
| 230 if revision is None: | 224 if revision is None: |
| 231 revision = latest | 225 revision = latest |
| 232 SaveVersionControlDir(local_path); | 226 SaveVersionControlDir(local_path); |
| 233 RefreshFiles(url, revision, remote_path, local_path, depth) | 227 RefreshFiles(url, revision, remote_path, local_path, depth) |
| 234 PruneExtraFiles(local_path) | 228 PruneExtraFiles(local_path) |
| 235 GenerateReadme(local_path, readme, url, revision) | 229 GenerateReadme(local_path, readme, url, revision) |
| 236 RestoreVersionControlDir(local_path); | 230 RestoreVersionControlDir(local_path); |
| 237 | 231 |
| 238 if __name__ == '__main__': | 232 if __name__ == '__main__': |
| 239 main() | 233 main() |
| OLD | NEW |