| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2017 The Chromium Authors. All rights reserved. | 2 # Copyright 2017 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 """Tool to help developers rebase branches across the Blink rename.""" | 5 """Tool to help developers rebase branches across the Blink rename.""" |
| 6 | 6 |
| 7 import argparse |
| 7 import json | 8 import json |
| 8 import os | 9 import os |
| 9 import subprocess | 10 import subprocess |
| 10 import shutil | 11 import shutil |
| 11 import sys | 12 import sys |
| 12 import tempfile | 13 import tempfile |
| 13 | 14 |
| 14 | 15 |
| 15 class _DepotToolsNotFoundException(Exception): | 16 class _DepotToolsNotFoundException(Exception): |
| 16 pass | 17 pass |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 % (path, path2)) | 72 % (path, path2)) |
| 72 | 73 |
| 73 return DepotToolsWrapper(path) | 74 return DepotToolsWrapper(path) |
| 74 | 75 |
| 75 | 76 |
| 76 class Bootstrapper(object): | 77 class Bootstrapper(object): |
| 77 """Helper class for bootstrapping startup of the rebase helper. | 78 """Helper class for bootstrapping startup of the rebase helper. |
| 78 | 79 |
| 79 Performs update checks and stages any required binaries.""" | 80 Performs update checks and stages any required binaries.""" |
| 80 | 81 |
| 81 def __init__(self, depot_tools): | 82 def __init__(self, depot_tools, components_path_override): |
| 82 """Bootstrapper constructor. | 83 """Bootstrapper constructor. |
| 83 | 84 |
| 84 Args: | 85 Args: |
| 85 depot_tools: a wrapper for invoking depot_tools. | 86 depot_tools: a wrapper for invoking depot_tools. |
| 87 components_path_override: If set, used as the path for the COMPONENTS file |
| 88 rather than using the copy in the Google Storage bucket. |
| 86 """ | 89 """ |
| 87 self.__depot_tools = depot_tools | 90 self.__depot_tools = depot_tools |
| 91 self.__components_path_override = components_path_override |
| 88 self.__tmpdir = None | 92 self.__tmpdir = None |
| 89 | 93 |
| 90 def __enter__(self): | 94 def __enter__(self): |
| 91 self.__tmpdir = tempfile.mkdtemp() | 95 self.__tmpdir = tempfile.mkdtemp() |
| 92 return self | 96 return self |
| 93 | 97 |
| 94 def __exit__(self, exc_type, exc_value, traceback): | 98 def __exit__(self, exc_type, exc_value, traceback): |
| 95 shutil.rmtree(self.__tmpdir, ignore_errors=True) | 99 shutil.rmtree(self.__tmpdir, ignore_errors=True) |
| 96 | 100 |
| 97 def update(self): | 101 def update(self): |
| 98 """Performs an update check for various components.""" | 102 """Performs an update check for various components.""" |
| 99 components = self._get_latest_components() | 103 components = self._get_latest_components() |
| 100 for name, sha1_hash in components.iteritems(): | 104 for name, sha1_hash in components.iteritems(): |
| 101 args = [ | 105 args = [ |
| 102 '--no_auth', '--no_resume', '-b', 'chromium-blink-rename', | 106 '--no_auth', '--no_resume', '-b', 'chromium-blink-rename', |
| 103 '--extract', sha1_hash | 107 '--extract', sha1_hash |
| 104 ] | 108 ] |
| 105 if '-' in name: | 109 if '-' in name: |
| 106 name, platform = name.split('-', 1) | 110 name, platform = name.split('-', 1) |
| 107 args.append('-p') | 111 args.append('-p') |
| 108 args.append(platform) | 112 args.append(platform) |
| 109 args.append('-o') | 113 args.append('-o') |
| 110 args.append(os.path.join('staging', '%s.tar.gz' % name)) | 114 args.append(os.path.join('staging', '%s.tar.gz' % name)) |
| 111 self.__depot_tools.call_download_from_google_storage(*args) | 115 self.__depot_tools.call_download_from_google_storage(*args) |
| 112 | 116 |
| 113 def _get_latest_components(self): | 117 def _get_latest_components(self): |
| 114 """Fetches info about the latest components from google storage. | 118 """Fetches info about the latest components from google storage. |
| 115 | 119 |
| 116 The return value should be a dict of component names to SHA1 hashes.""" | 120 The return value should be a dict of component names to SHA1 hashes.""" |
| 117 hashes_path = os.path.join(self.__tmpdir, 'COMPONENTS') | 121 components_path = self.__components_path_override |
| 118 self.__depot_tools.call_gsutil( | 122 if not components_path: |
| 119 'cp', 'gs://chromium-blink-rename/COMPONENTS', hashes_path) | 123 components_path = os.path.join(self.__tmpdir, 'COMPONENTS') |
| 120 with open(hashes_path) as f: | 124 self.__depot_tools.call_gsutil( |
| 125 'cp', 'gs://chromium-blink-rename/COMPONENTS', components_path) |
| 126 with open(components_path) as f: |
| 121 return json.loads(f.read()) | 127 return json.loads(f.read()) |
| 122 | 128 |
| 123 | 129 |
| 124 def main(): | 130 def main(): |
| 131 # Intentionally suppress help. These are internal testing flags. |
| 132 parser = argparse.ArgumentParser(add_help=False) |
| 133 parser.add_argument('--components-file') |
| 134 args, remaining_argv = parser.parse_known_args() |
| 135 |
| 125 script_dir = os.path.dirname(os.path.realpath(__file__)) | 136 script_dir = os.path.dirname(os.path.realpath(__file__)) |
| 126 os.chdir(script_dir) | 137 os.chdir(script_dir) |
| 127 | 138 |
| 128 try: | 139 try: |
| 129 depot_tools = _find_depot_tools() | 140 depot_tools = _find_depot_tools() |
| 130 except _DepotToolsNotFoundException as e: | 141 except _DepotToolsNotFoundException as e: |
| 131 print e.message | 142 print e.message |
| 132 return 1 | 143 return 1 |
| 133 | 144 |
| 134 print 'Checking for updates...' | 145 print 'Checking for updates...' |
| 135 with Bootstrapper(depot_tools) as bootstrapper: | 146 with Bootstrapper(depot_tools, args.components_file) as bootstrapper: |
| 136 bootstrapper.update() | 147 bootstrapper.update() |
| 137 | 148 |
| 138 # Import stage 2 and launch it. | 149 # Import stage 2 and launch it. |
| 139 tool_pylib = os.path.abspath(os.path.join(script_dir, 'staging/pylib')) | 150 tool_pylib = os.path.abspath(os.path.join(script_dir, 'staging/pylib')) |
| 140 sys.path.insert(0, tool_pylib) | 151 sys.path.insert(0, tool_pylib) |
| 141 from blink_rename_merge_helper import driver | 152 from blink_rename_merge_helper import driver |
| 153 # Note: for compatibility with older versions of run.py, set sys.argv to the |
| 154 # unconsumed args. |
| 155 sys.argv = sys.argv[:1] + remaining_argv |
| 142 driver.run() | 156 driver.run() |
| 143 | 157 |
| 144 | 158 |
| 145 if __name__ == '__main__': | 159 if __name__ == '__main__': |
| 146 sys.exit(main()) | 160 sys.exit(main()) |
| OLD | NEW |