| #!/usr/bin/env python3 |
| # |
| # Copyright 2013 The Flutter 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 json |
| import os |
| import subprocess |
| import sys |
| import urllib.request, urllib.error, urllib.parse |
| from utils import commit |
| from utils import system |
| import patch |
| |
| # //base and its dependencies |
| _base_deps = [ |
| 'base', |
| 'testing', |
| 'third_party/ashmem', |
| 'third_party/libevent', |
| 'third_party/tcmalloc', |
| ] |
| |
| # //build and its dependencies |
| _build_deps = [ |
| 'build', |
| 'third_party/android_testrunner', |
| 'third_party/binutils', |
| 'third_party/instrumented_libraries', |
| 'third_party/pymock', |
| 'tools/android', |
| 'tools/clang', |
| 'tools/generate_library_loader', |
| 'tools/gritsettings', |
| 'tools/valgrind', |
| ] |
| |
| _third_party_deps = [ |
| 'third_party/android_platform', |
| 'third_party/apple_apsl', |
| 'third_party/expat', |
| 'third_party/freetype-android', |
| 'third_party/harfbuzz-ng', |
| 'third_party/iccjpeg', |
| 'third_party/jinja2', |
| 'third_party/jsr-305', |
| 'third_party/junit', |
| 'third_party/libjpeg', |
| 'third_party/libpng', |
| 'third_party/markupsafe', |
| 'third_party/mesa', |
| 'third_party/mockito', |
| 'third_party/ply', |
| 'third_party/qcms', |
| 'third_party/robolectric', |
| 'third_party/zlib', |
| ] |
| |
| dirs_from_chromium = _base_deps + _build_deps + _third_party_deps |
| |
| dirs_from_mojo = [ |
| 'mojo/android', |
| 'mojo/application', |
| 'mojo/common', |
| ('mojo/dart/embedder', ['embedder.gni']), |
| 'mojo/dart/packages/mojo', |
| 'mojo/data_pipe_utils', |
| 'mojo/edk', |
| 'mojo/environment', |
| 'mojo/java', |
| 'mojo/message_pump', |
| 'mojo/services', |
| 'mojo/skia', |
| 'services/sensors', |
| ] |
| |
| # The contents of these files before the roll will be preserved after the roll, |
| # even though they live in directories rolled in from Chromium. |
| files_not_to_roll = [ |
| 'build/config/ui.gni', |
| 'build/ls.py', |
| 'build/module_args/mojo.gni', |
| 'tools/android/download_android_tools.py', |
| 'tools/android/VERSION_LINUX_NDK', |
| 'tools/android/VERSION_LINUX_SDK', |
| 'tools/android/VERSION_MACOSX_NDK', |
| 'tools/android/VERSION_MACOSX_SDK', |
| ] |
| |
| |
| def rev(source_dir, dest_dir, dirs_to_rev, name, revision_file=None): |
| for dir_to_rev in dirs_to_rev: |
| if type(dir_to_rev) is tuple: |
| d, file_subset = dir_to_rev |
| else: |
| d = dir_to_rev |
| file_subset = None |
| print("removing directory %s" % d) |
| try: |
| system(["git", "rm", "-r", d], cwd=dest_dir) |
| except subprocess.CalledProcessError: |
| print("Could not remove %s" % d) |
| print("cloning directory %s" % d) |
| |
| if file_subset is None: |
| files = system(["git", "ls-files", d], cwd=source_dir).splitlines() |
| else: |
| files = [os.path.join(d, f) for f in file_subset] |
| |
| for f in files: |
| source_path = os.path.join(source_dir, f) |
| if not os.path.isfile(source_path): |
| continue |
| dest_path = os.path.join(dest_dir, f) |
| system(["mkdir", "-p", os.path.dirname(dest_path)], cwd=source_dir) |
| system(["cp", source_path, dest_path], cwd=source_dir) |
| system(["git", "add", d], cwd=dest_dir) |
| |
| for f in files_not_to_roll: |
| system(["git", "checkout", "HEAD", f], cwd=dest_dir) |
| |
| src_commit = system(["git", "rev-parse", "HEAD"], cwd=source_dir).strip() |
| |
| if revision_file: |
| with open(revision_file, 'w') as f: |
| f.write(src_commit) |
| |
| system(["git", "add", "."], cwd=dest_dir) |
| commit("Update to %s %s" % (name, src_commit), cwd=dest_dir) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser( |
| description="Update the mojo repo's " + |
| "snapshot of things imported from chromium." |
| ) |
| parser.add_argument("--mojo-dir", type=str) |
| parser.add_argument("--chromium-dir", type=str) |
| parser.add_argument("--dest-dir", type=str) |
| |
| args = parser.parse_args() |
| |
| dest_dir = os.path.abspath(args.dest_dir) |
| |
| if args.mojo_dir: |
| rev( |
| os.path.abspath(args.mojo_dir), |
| dest_dir, |
| dirs_from_mojo, |
| 'mojo', |
| revision_file='mojo/VERSION' |
| ) |
| |
| if args.chromium_dir: |
| rev( |
| os.path.abspath(args.chromium_dir), dest_dir, dirs_from_chromium, |
| 'chromium' |
| ) |
| |
| try: |
| patch.patch_and_filter(dest_dir, os.path.join('patches', 'chromium')) |
| except subprocess.CalledProcessError: |
| print("ERROR: Roll failed due to a patch not applying") |
| print("Fix the patch to apply, commit the result, and re-run this script") |
| return 1 |
| |
| return 0 |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main()) |