| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 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 | 5 |
| 6 """Downloads and unpacks a toolchain for building on Windows. The contents are | 6 """Downloads and unpacks a toolchain for building on Windows. The contents are |
| 7 matched by sha1 which will be updated when the toolchain is updated. | 7 matched by sha1 which will be updated when the toolchain is updated. |
| 8 | 8 |
| 9 Having a toolchain script in depot_tools means that it's not versioned | 9 Having a toolchain script in depot_tools means that it's not versioned |
| 10 directly with the source code. That is, if the toolchain is upgraded, but | 10 directly with the source code. That is, if the toolchain is upgraded, but |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 shutil.rmtree(path, ignore_errors=True) | 196 shutil.rmtree(path, ignore_errors=True) |
| 197 else: | 197 else: |
| 198 # shutil.rmtree() doesn't delete read-only files on Windows. | 198 # shutil.rmtree() doesn't delete read-only files on Windows. |
| 199 subprocess.check_call('rmdir /s/q "%s"' % path, shell=True) | 199 subprocess.check_call('rmdir /s/q "%s"' % path, shell=True) |
| 200 | 200 |
| 201 | 201 |
| 202 def DoTreeMirror(target_dir, tree_sha1): | 202 def DoTreeMirror(target_dir, tree_sha1): |
| 203 """In order to save temporary space on bots that do not have enough space to | 203 """In order to save temporary space on bots that do not have enough space to |
| 204 download ISOs, unpack them, and copy to the target location, the whole tree | 204 download ISOs, unpack them, and copy to the target location, the whole tree |
| 205 is uploaded as a zip to internal storage, and then mirrored here.""" | 205 is uploaded as a zip to internal storage, and then mirrored here.""" |
| 206 temp_dir, local_zip = DownloadUsingGsutil(tree_sha1 + '.zip') | 206 use_local_zip = bool(int(os.environ.get('USE_LOCAL_ZIP', 0))) |
| 207 if use_local_zip: |
| 208 temp_dir = None |
| 209 local_zip = tree_sha1 + '.zip' |
| 210 else: |
| 211 temp_dir, local_zip = DownloadUsingGsutil(tree_sha1 + '.zip') |
| 207 sys.stdout.write('Extracting %s...\n' % local_zip) | 212 sys.stdout.write('Extracting %s...\n' % local_zip) |
| 208 sys.stdout.flush() | 213 sys.stdout.flush() |
| 209 with zipfile.ZipFile(local_zip, 'r', zipfile.ZIP_DEFLATED, True) as zf: | 214 with zipfile.ZipFile(local_zip, 'r', zipfile.ZIP_DEFLATED, True) as zf: |
| 210 zf.extractall(target_dir) | 215 zf.extractall(target_dir) |
| 211 if temp_dir: | 216 if temp_dir: |
| 212 RmDir(temp_dir) | 217 RmDir(temp_dir) |
| 213 | 218 |
| 214 | 219 |
| 215 def main(): | 220 def main(): |
| 216 parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) | 221 parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 current_hash = CalculateHash(target_dir) | 264 current_hash = CalculateHash(target_dir) |
| 260 if current_hash not in desired_hashes: | 265 if current_hash not in desired_hashes: |
| 261 should_use_gs = False | 266 should_use_gs = False |
| 262 if (HaveSrcInternalAccess() or | 267 if (HaveSrcInternalAccess() or |
| 263 LooksLikeGoogler() or | 268 LooksLikeGoogler() or |
| 264 CanAccessToolchainBucket()): | 269 CanAccessToolchainBucket()): |
| 265 should_use_gs = True | 270 should_use_gs = True |
| 266 if not CanAccessToolchainBucket(): | 271 if not CanAccessToolchainBucket(): |
| 267 RequestGsAuthentication() | 272 RequestGsAuthentication() |
| 268 if not should_use_gs: | 273 if not should_use_gs: |
| 269 print('Please follow the instructions at ' | 274 print('\n\n\nPlease follow the instructions at ' |
| 270 'http://www.chromium.org/developers/how-tos/' | 275 'https://www.chromium.org/developers/how-tos/' |
| 271 'build-instructions-windows') | 276 'build-instructions-windows\n\n') |
| 272 return 1 | 277 return 1 |
| 273 print('Windows toolchain out of date or doesn\'t exist, updating (Pro)...') | 278 print('Windows toolchain out of date or doesn\'t exist, updating (Pro)...') |
| 274 print(' current_hash: %s' % current_hash) | 279 print(' current_hash: %s' % current_hash) |
| 275 print(' desired_hashes: %s' % ', '.join(desired_hashes)) | 280 print(' desired_hashes: %s' % ', '.join(desired_hashes)) |
| 276 sys.stdout.flush() | 281 sys.stdout.flush() |
| 277 DelayBeforeRemoving(target_dir) | 282 DelayBeforeRemoving(target_dir) |
| 278 if sys.platform == 'win32': | 283 if sys.platform == 'win32': |
| 279 # This stays resident and will make the rmdir below fail. | 284 # This stays resident and will make the rmdir below fail. |
| 280 with open(os.devnull, 'wb') as nul: | 285 with open(os.devnull, 'wb') as nul: |
| 281 subprocess.call(['taskkill', '/f', '/im', 'mspdbsrv.exe'], | 286 subprocess.call(['taskkill', '/f', '/im', 'mspdbsrv.exe'], |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 | 329 |
| 325 if options.output_json: | 330 if options.output_json: |
| 326 shutil.copyfile(os.path.join(target_dir, '..', 'data.json'), | 331 shutil.copyfile(os.path.join(target_dir, '..', 'data.json'), |
| 327 options.output_json) | 332 options.output_json) |
| 328 | 333 |
| 329 return 0 | 334 return 0 |
| 330 | 335 |
| 331 | 336 |
| 332 if __name__ == '__main__': | 337 if __name__ == '__main__': |
| 333 sys.exit(main()) | 338 sys.exit(main()) |
| OLD | NEW |