blob: a066a7f7bb80b0071c3783d20a5be2b0654a6c5c [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2015 The Chromium 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 urllib2
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/libxml', # via //base/test
'third_party/modp_b64',
'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',
]
_chromium_libs = [
'url',
]
_third_party_deps = [
'third_party/android_platform',
'third_party/apple_apsl',
'third_party/brotli',
'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/khronos',
'third_party/libjpeg',
'third_party/libpng',
'third_party/libXNVCtrl',
'third_party/markupsafe',
'third_party/mesa',
'third_party/mockito',
'third_party/ots',
'third_party/ply',
'third_party/qcms',
'third_party/re2',
'third_party/robolectric',
'third_party/zlib',
]
dirs_from_chromium = _base_deps + _build_deps + _chromium_libs + _third_party_deps
dirs_from_mojo = [
'gpu',
'mojo',
'services/asset_bundle',
'services/keyboard',
'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',
'gpu/BUILD.gn',
'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):
for d in dirs_to_rev:
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
files = system(["git", "ls-files", d], cwd=source_dir)
for f in files.splitlines():
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)
system(["git", "add", "."], cwd=dest_dir)
src_commit = system(["git", "rev-parse", "HEAD"], cwd=source_dir).strip()
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()
if args.mojo_dir:
rev(args.mojo_dir, args.dest_dir, dirs_from_mojo, 'mojo')
try:
patch.patch_and_filter(args.dest_dir,
os.path.join('patches', 'mojo'))
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
if args.chromium_dir:
rev(args.chromium_dir, args.dest_dir, dirs_from_chromium, 'chromium')
try:
patch.patch_and_filter(args.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())