| Index: roll.py
|
| diff --git a/roll.py b/roll.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..11c313cac3d732366969f21cf3f6a1b018e8ce02
|
| --- /dev/null
|
| +++ b/roll.py
|
| @@ -0,0 +1,130 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2015, 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.
|
| +"""Helper for updating snapshot of Observatory dependencies"""
|
| +
|
| +import argparse
|
| +import errno
|
| +import os
|
| +import platform
|
| +import shutil
|
| +import subprocess
|
| +import sys
|
| +import tempfile
|
| +import urllib
|
| +import urlparse
|
| +
|
| +SELF_PACKAGE_NAME = 'observatory'
|
| +SCRIPT_DIR = os.path.dirname(sys.argv[0])
|
| +
|
| +def check_for_pubspec_yaml(directory):
|
| + return os.path.exists(os.path.join(directory, 'pubspec.yaml'))
|
| +
|
| +def run_pub_get(directory):
|
| + os.chdir(directory)
|
| + print('Running pub get in %s' % directory)
|
| + subprocess.check_output(['pub', 'get'])
|
| +
|
| +def get_package_name(package_config):
|
| + return package_config.split(':', 1)[0]
|
| +
|
| +def get_package_path(package_config):
|
| + return os.path.abspath(
|
| + os.path.join(
|
| + urlparse.urlparse(
|
| + urllib.unquote(
|
| + package_config.split(':', 1)[1])).path.strip(),
|
| + '..'))
|
| +
|
| +def snapshot_package(src, dst):
|
| + shutil.copytree(src, dst)
|
| +
|
| +def update_packages(src, dst):
|
| + print('Deleting %s' % dst)
|
| + try:
|
| + shutil.rmtree(dst)
|
| + except OSError as e:
|
| + if e.errno != errno.ENOENT:
|
| + raise e
|
| + pass
|
| + with open(src) as f:
|
| + packages = f.read().splitlines()
|
| + print('Snapshotting packages into %s' % dst)
|
| + for package_config in packages:
|
| + if package_config.startswith('#'):
|
| + # Skip comments.
|
| + continue
|
| + package_name = get_package_name(package_config)
|
| + if package_name == SELF_PACKAGE_NAME:
|
| + # Skip self.
|
| + continue
|
| + package_dir = get_package_path(package_config)
|
| + print('Snapshotting package %s' % package_name)
|
| + snapshot_package(package_dir, os.path.join(dst, package_name))
|
| +
|
| +
|
| +def rewrite_pubspec_yaml(packages_src, yaml_src, yaml_dst):
|
| + with open(yaml_src) as f:
|
| + yaml = f.read().splitlines()
|
| + yaml = [line for line in yaml if line.strip()]
|
| + yaml.insert(0, '# Generated file DO NOT EDIT')
|
| + yaml.append('dependency_overrides:')
|
| + with open(packages_src) as f:
|
| + packages = f.read().splitlines()
|
| + for package_config in packages:
|
| + if package_config.startswith('#'):
|
| + # Skip comments.
|
| + continue
|
| + package_name = get_package_name(package_config)
|
| + if package_name == SELF_PACKAGE_NAME:
|
| + # Skip self.
|
| + continue
|
| + yaml.append(' %s:' % package_name)
|
| + yaml.append(
|
| + ' path: ../../third_party/observatory_pub_packages/packages/%s'
|
| + % package_name)
|
| + yaml.append('')
|
| + print('!!! Update Observatory pubspec.yaml in sdk source tree')
|
| + with open(yaml_dst, 'w') as f:
|
| + f.write('\n'.join(yaml))
|
| +
|
| +def main():
|
| + parser = argparse.ArgumentParser(
|
| + description='Updating snapshot of Observatory dependencies')
|
| + parser.add_argument(
|
| + '--dart-sdk-src',
|
| + action='store',
|
| + metavar='dart_sdk_src',
|
| + help='Path to dart/sdk',
|
| + default='~/workspace/dart/sdk')
|
| + args = parser.parse_args()
|
| + args.dart_sdk_src = os.path.abspath(os.path.expanduser(args.dart_sdk_src))
|
| + observatory_dir = os.path.join(args.dart_sdk_src, 'runtime', 'observatory')
|
| +
|
| + if not check_for_pubspec_yaml(SCRIPT_DIR):
|
| + print('Error could not find pubspec.yaml next to roll.py')
|
| + return 1
|
| +
|
| + if not check_for_pubspec_yaml(observatory_dir):
|
| + print('Error could not find Observatory source.')
|
| + return 1
|
| +
|
| + yaml_src = os.path.abspath(os.path.join(SCRIPT_DIR, 'pubspec.yaml'))
|
| + yaml_dst = os.path.abspath(os.path.join(observatory_dir, 'pubspec.yaml'))
|
| +
|
| + packages_dst = os.path.abspath(os.path.join(SCRIPT_DIR, 'packages'))
|
| +
|
| + temp_dir = tempfile.mkdtemp();
|
| + try:
|
| + shutil.copyfile(os.path.join(SCRIPT_DIR, 'pubspec.yaml'),
|
| + os.path.join(temp_dir, 'pubspec.yaml'))
|
| + packages_src = os.path.join(temp_dir, '.packages')
|
| + run_pub_get(temp_dir)
|
| + update_packages(packages_src, packages_dst)
|
| + rewrite_pubspec_yaml(packages_src, yaml_src, yaml_dst)
|
| + finally:
|
| + shutil.rmtree(temp_dir)
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main());
|
|
|