| #!/usr/bin/env python2.7 |
| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import fileinput |
| import os |
| import re |
| import shutil |
| import subprocess |
| import sys |
| |
| |
| SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| FUCHSIA_ROOT = os.path.dirname( # $root |
| os.path.dirname( # scripts |
| SCRIPT_DIR)) # unification |
| |
| |
| def run_command(command): |
| return subprocess.check_output(command, cwd=FUCHSIA_ROOT) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser( |
| description='Moves a Banjo library from //zircon to //sdk') |
| parser.add_argument('lib', |
| help='Name of the library to migrate') |
| args = parser.parse_args() |
| lib = args.lib |
| |
| # Check that the fuchsia.git tree is clean. |
| diff = run_command(['git', 'status', '--porcelain']) |
| if diff: |
| print('Please make sure your tree is clean before running this script') |
| print(diff) |
| return 1 |
| |
| sdk_base = os.path.join(FUCHSIA_ROOT, 'sdk', 'banjo') |
| sdk_dir = os.path.join(sdk_base, lib) |
| banjo_base = os.path.join(FUCHSIA_ROOT, 'zircon', 'system', 'banjo') |
| source_dir = os.path.join(banjo_base, lib) |
| |
| # Move the sources. |
| shutil.move(source_dir, sdk_base) |
| |
| # Edit the build file. |
| is_dummy = not (lib.startswith('ddk.protocol') or lib.startswith('ddk.hw')) |
| for line in fileinput.FileInput(os.path.join(sdk_dir, 'BUILD.gn'), |
| inplace=True): |
| line = line.replace('$zx_build/public/gn/banjo.gni', |
| '//build/banjo/banjo.gni') |
| line = line.replace('banjo_library', |
| 'banjo_dummy' if is_dummy else 'banjo') |
| line = line.replace('public_deps', |
| 'deps') |
| line = line.replace('$zx/system/banjo', |
| '//zircon/system/banjo') |
| sys.stdout.write(line) |
| |
| # Edit references to the library. |
| for base, _, files in os.walk(FUCHSIA_ROOT): |
| for file in files: |
| if file != 'BUILD.gn': |
| continue |
| for line in fileinput.FileInput(os.path.join(base, file), |
| inplace=True): |
| # Make sure that only exact matches are replaced, as some |
| # library names are prefix of other names. |
| # Examples: |
| # //zircon/s/b/ddk.foo.bar" --> "//sdk/b/foo.bar" |
| # //zircon/s/b/ddk.foo.bar:boop" --> "//sdk/b/foo.bar:boop" |
| line = re.sub('"(//zircon/system/banjo/' + lib + ')([:"])', |
| '"//sdk/banjo/' + lib + '\\2', |
| line) |
| sys.stdout.write(line) |
| for line in fileinput.FileInput(os.path.join(banjo_base, 'BUILD.gn'), |
| inplace=True): |
| if not '"' + lib + '"' in line: |
| sys.stdout.write(line) |
| |
| # Create a commit. |
| run_command(['git', 'checkout', '-b', 'banjo-move-' + lib, 'JIRI_HEAD']) |
| run_command(['git', 'add', sdk_dir]) |
| message = [ |
| '[banjo] Move ' + lib + ' to //sdk/banjo', |
| '', |
| 'Generated with: //scripts/unification/move_banjo_library.py ' + lib, |
| '', |
| 'Bug: 36540' |
| ] |
| commit_command = ['git', 'commit', '-a'] |
| for line in message: |
| commit_command += ['-m', line] |
| run_command(commit_command) |
| |
| print('Change is ready, use "jiri upload" to start the review process.') |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |