| Index: tools/create_pkg_manifest.py
|
| diff --git a/tools/create_pkg_manifest.py b/tools/create_pkg_manifest.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..5affb96034b66c22b809f21f2d70b7837d9a9be1
|
| --- /dev/null
|
| +++ b/tools/create_pkg_manifest.py
|
| @@ -0,0 +1,108 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2016 The Dart project authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +# Usage: create_pkg_manifest.py --deps <DEPS file> --output <jiri manifest>
|
| +#
|
| +# This script parses the DEPS file, extracts dependencies that live under
|
| +# third_party/pkg, and writes them to a file suitable for consumption as a
|
| +# jiri manifest for Fuchsia. It is assumed that the Dart tree is under
|
| +# //dart in the Fuchsia world, and so the dependencies extracted by this script
|
| +# will go under //dart/third_party/pkg.
|
| +
|
| +import argparse
|
| +import os
|
| +import sys
|
| +import utils
|
| +
|
| +SCRIPT_DIR = os.path.dirname(sys.argv[0])
|
| +DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..'))
|
| +
|
| +# Used in parsing the DEPS file.
|
| +class VarImpl(object):
|
| + def __init__(self, local_scope):
|
| + self._local_scope = local_scope
|
| +
|
| + def Lookup(self, var_name):
|
| + """Implements the Var syntax."""
|
| + if var_name in self._local_scope.get("vars", {}):
|
| + return self._local_scope["vars"][var_name]
|
| + raise Exception("Var is not defined: %s" % var_name)
|
| +
|
| +
|
| +def ParseDepsFile(deps_file):
|
| + local_scope = {}
|
| + var = VarImpl(local_scope)
|
| + global_scope = {
|
| + 'Var': var.Lookup,
|
| + 'deps_os': {},
|
| + }
|
| + # Read the content.
|
| + with open(deps_file, 'r') as fp:
|
| + deps_content = fp.read()
|
| +
|
| + # Eval the content.
|
| + exec(deps_content, global_scope, local_scope)
|
| +
|
| + # Extract the deps and filter.
|
| + deps = local_scope.get('deps', {})
|
| + filtered_deps = {}
|
| + for k, v in deps.iteritems():
|
| + if 'sdk/third_party/pkg' in k:
|
| + new_key = k.replace('sdk', 'dart', 1)
|
| + filtered_deps[new_key] = v
|
| +
|
| + return filtered_deps
|
| +
|
| +
|
| +def WriteManifest(deps, manifest_file):
|
| + project_template = """
|
| + <project name="%s"
|
| + path="%s"
|
| + remote="%s"
|
| + revision="%s"/>
|
| + """
|
| + warning = ('<!-- This file is generated by '
|
| + '//dart/tools/create_pkg_manifest.py. DO NOT EDIT -->\n')
|
| + with open(manifest_file, 'w') as manifest:
|
| + manifest.write(warning)
|
| + manifest.write('<?xml version="1.0" encoding="UTF-8"?>\n')
|
| + manifest.write('<manifest>\n')
|
| + manifest.write(' <projects>\n')
|
| + for path, remote in deps.iteritems():
|
| + remote_components = remote.split('@')
|
| + remote_url = remote_components[0]
|
| + remote_version = remote_components[1]
|
| + manifest.write(
|
| + project_template % (path, path, remote_url, remote_version))
|
| + manifest.write(' </projects>\n')
|
| + manifest.write('</manifest>\n')
|
| +
|
| +
|
| +def ParseArgs(args):
|
| + args = args[1:]
|
| + parser = argparse.ArgumentParser(
|
| + description='A script to generate a jiri manifest for third_party/pkg.')
|
| +
|
| + parser.add_argument('--deps', '-d',
|
| + type=str,
|
| + help='Input DEPS file.',
|
| + default=os.path.join(DART_ROOT, 'DEPS'))
|
| + parser.add_argument('--output', '-o',
|
| + type=str,
|
| + help='Output jiri manifest.',
|
| + default=os.path.join(DART_ROOT, 'dart_third_party_pkg.manifest'))
|
| +
|
| + return parser.parse_args(args)
|
| +
|
| +
|
| +def Main(argv):
|
| + args = ParseArgs(argv)
|
| + deps = ParseDepsFile(args.deps)
|
| + WriteManifest(deps, args.output)
|
| + return 0
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(Main(sys.argv))
|
|
|