| #!/usr/bin/python |
| # Copyright (c) 2012, 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. |
| |
| import optparse |
| import os |
| import os.path |
| import re |
| import shutil |
| import subprocess |
| import sys |
| |
| SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__)) |
| DART_PATH = os.path.abspath(os.path.join(SCRIPT_PATH, '..', '..', '..')) |
| |
| # Path to install latest IDL. |
| IDL_PATH = os.path.join(DART_PATH, 'third_party', 'WebCore') |
| |
| # Whitelist of files to keep. |
| WHITELIST = [ |
| r'LICENSE(\S+)', |
| r'(\S+)\.idl'] |
| |
| # README file to generate. |
| README = os.path.join(IDL_PATH, 'README') |
| |
| # SVN URL to latest Dartium version of WebKit. |
| DEPS = 'http://dart.googlecode.com/svn/branches/bleeding_edge/deps/dartium.deps/DEPS' |
| URL_PATTERN = r'"dartium_webkit_trunk": "(\S+)",' |
| REV_PATTERN = r'"dartium_webkit_revision": "(\d+)",' |
| WEBCORE_SUBPATH = 'Source/WebCore' |
| |
| |
| def RunCommand(cmd): |
| """Executes a shell command and return its stdout.""" |
| print ' '.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 GetWebkitSvnRevision(): |
| """Returns a tuple with the (dartium webkit repo, latest revision).""" |
| deps = RunCommand(['svn', 'cat', DEPS]) |
| url = re.search(URL_PATTERN, deps).group(1) |
| revision = re.search(REV_PATTERN, deps).group(1) |
| return (url, revision) |
| |
| |
| def RefreshIDL(url, revision): |
| """Refreshes the IDL to specific WebKit url / revision.""" |
| cwd = os.getcwd() |
| try: |
| shutil.rmtree(IDL_PATH) |
| os.chdir(os.path.dirname(IDL_PATH)) |
| RunCommand(['svn', 'export', '-r', revision, url + '/' + WEBCORE_SUBPATH]) |
| finally: |
| os.chdir(cwd) |
| |
| |
| def PruneExtraFiles(): |
| """Removes all files that do not match the whitelist.""" |
| pattern = re.compile(reduce(lambda x,y: '%s|%s' % (x,y), |
| map(lambda z: '(%s)' % z, WHITELIST))) |
| for (root, dirs, files) in os.walk(IDL_PATH, topdown=False): |
| for f in files: |
| if not pattern.match(f): |
| os.remove(os.path.join(root, f)) |
| for d in dirs: |
| dirpath = os.path.join(root, d) |
| if not os.listdir(dirpath): |
| shutil.rmtree(dirpath) |
| |
| |
| def ParseOptions(): |
| parser = optparse.OptionParser() |
| parser.add_option('--revision', '-r', dest='revision', |
| help='Revision to install', default=None) |
| args, _ = parser.parse_args() |
| return args.revision |
| |
| |
| def GenerateReadme(url, revision): |
| readme = """This directory contains a copy of WebKit/WebCore IDL files. |
| See the attached LICENSE-* files in this directory. |
| |
| Please do not modify the files here. They are periodically copied |
| using the script: $DART_ROOT/lib/dom/scripts/%(script)s |
| |
| The current version corresponds to: |
| URL: %(url)s |
| Current revision: %(revision)s |
| """ % { |
| 'script': os.path.basename(__file__), |
| 'url': url, |
| 'revision': revision } |
| out = open(README, 'w') |
| out.write(readme) |
| out.close() |
| |
| |
| def main(): |
| revision = ParseOptions() |
| url, latest = GetWebkitSvnRevision() |
| if not revision: |
| revision = latest |
| RefreshIDL(url, revision) |
| PruneExtraFiles() |
| GenerateReadme(url, revision) |
| |
| |
| if __name__ == '__main__': |
| main() |