| #!/usr/bin/env python |
| |
| import argparse |
| import logging |
| import os |
| import re |
| import shutil |
| from genmakefiles import GenerateMakefiles |
| |
| AOSP_PATH = os.getcwd() |
| UNWANTED_DIRS = [ |
| 'build/', |
| 'test/', |
| 'third_party/', |
| 'buildtools/', |
| 'tools/' |
| ] |
| |
| parser = argparse.ArgumentParser(description='Merge a new version of V8.') |
| parser.add_argument('--v8_path', \ |
| required=True, help='Absolute path to the new version of V8 to be merged.') |
| args = parser.parse_args() |
| |
| # Find all the files that are in both the old and the new repo; remove them |
| # (ie. leave the Android-only files in place) |
| new_files = [f for f in os.listdir(args.v8_path) if not f.startswith(".")] |
| current_files = [f for f in os.listdir(AOSP_PATH) if not f.startswith(".")] |
| to_remove = [f for f in current_files if f in new_files] |
| |
| for file in to_remove: |
| path = os.path.join(AOSP_PATH, file) |
| if os.path.isfile(path): |
| os.remove(path) |
| else: |
| shutil.rmtree(path) |
| |
| # Copy accross the new files. |
| all_new_v8 = os.path.join(args.v8_path, "*") |
| rsync_cmd = "rsync -r --exclude=\"*.git*\" " + all_new_v8 + \ |
| " . > /dev/null" |
| if os.system(rsync_cmd) != 0: |
| raise RuntimeError("Could not rsync the new V8.") |
| |
| # Now remove extra stuff that AOSP doesn't want (to save space) |
| for file in UNWANTED_DIRS: |
| path = os.path.join(AOSP_PATH, file) |
| shutil.rmtree(path) |
| |
| # Create new makefiles |
| GenerateMakefiles() |
| |
| # Update V8_MERGE_REVISION |
| major_version = 0 |
| minor_version = 0 |
| build_number = 0 |
| patch_level = 0 |
| |
| success = True |
| with open(os.path.join(AOSP_PATH, "include/v8-version.h"), 'r') as f: |
| content = f.read() |
| result = re.search("V8_MAJOR_VERSION (\\d*)", content) |
| if result != None: |
| major_version = result.group(1) |
| else: |
| success = False |
| result = re.search("V8_MINOR_VERSION (\\d*)", content) |
| if result != None: |
| minor_version = result.group(1) |
| else: |
| success = False |
| result = re.search("V8_BUILD_NUMBER (\\d*)", content) |
| if result != None: |
| build_number = result.group(1) |
| else: |
| success = False |
| result = re.search("V8_PATCH_LEVEL (\\d*)", content) |
| if result != None: |
| patch_level = result.group(1) |
| else: |
| success = False |
| |
| version_string = major_version + "." + \ |
| minor_version + "." + \ |
| build_number + "." + \ |
| patch_level |
| |
| if not success: |
| logging.warning("Couldn't extract V8 version to update V8_MERGE_REVISION." + \ |
| " Got " + version_string) |
| else: |
| with open(os.path.join(AOSP_PATH, "V8_MERGE_REVISION"), 'w') as f: |
| f.write("v8 " + version_string + "\n") |
| f.write("https://chromium.googlesource.com/v8/v8/+/" + version_string) |
| |
| # Done! |
| print "Merged V8 " + version_string + ". Test, commit and upload!" |