Chromium Code Reviews| Index: build/fuchsia/update_sdk.py |
| diff --git a/build/fuchsia/update_sdk.py b/build/fuchsia/update_sdk.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..e34dda8bed4706e73a7a41360af57a25ac9552d4 |
| --- /dev/null |
| +++ b/build/fuchsia/update_sdk.py |
| @@ -0,0 +1,79 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2017 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. |
| + |
| +"""Updates the Fuchsia SDK to the given revision. Checks .gclient target_os |
| +so that it doesn't download unnecessarily.""" |
| + |
| +import os |
| +import subprocess |
| +import sys |
| +import tarfile |
| +import tempfile |
| + |
| +REPOSITORY_ROOT = os.path.abspath(os.path.join( |
| + os.path.dirname(__file__), '..', '..')) |
| +sys.path.append(os.path.join(REPOSITORY_ROOT, 'build')) |
| +sys.path.append(os.path.join(REPOSITORY_ROOT, 'tools', 'cr')) |
| + |
| +import cr.base |
|
Nico
2017/05/11 22:31:19
Since you're suing cr.auto and cr.loader below, sh
scottmg
2017/05/11 22:38:17
I'd actually never heard of it before 20mins ago,
|
| +import find_depot_tools |
| + |
| + |
| +def EnsureDirExists(path): |
| + if not os.path.exists(path): |
| + print 'Creating directory %s' % path |
| + os.makedirs(path) |
| + |
| + |
| +def main(): |
| + if len(sys.argv) != 2: |
| + print >>sys.stderr, 'usage: %s <sdk_hash>' % sys.argv[0] |
| + return 1 |
| + |
| + # Check whether we're targeting Fuchsia. |
| + user_path = os.path.expanduser(os.path.join('~', '.config', 'cr')) |
| + cr.auto.user.__path__.append(user_path) |
| + cr.loader.Scan() |
| + with cr.base.context.Create( |
| + description='Fuchsia SDK update tool', |
| + epilog='') as context: |
| + |
| + cr.base.client.DetectClient() |
| + target_os = cr.context.gclient.get('target_os', []) |
|
Nico
2017/05/11 22:31:19
How hard is it to add hooks_os to gclient directly
scottmg
2017/05/11 22:38:17
I admit I just got a little avoid-y when I landed
|
| + if 'fuchsia' not in target_os: |
| + # Nothing to do. |
| + return 0 |
| + |
| + sdk_hash = sys.argv[1] |
| + output_dir = os.path.join(REPOSITORY_ROOT, 'third_party', 'fuchsia-sdk') |
| + |
| + hash_filename = os.path.join(output_dir, '.hash') |
| + if os.path.exists(hash_filename): |
| + with open(hash_filename, 'r') as f: |
| + if f.read().strip() == sdk_hash: |
| + # Nothing to do. |
| + return 0 |
| + |
| + print 'Downloading SDK %s...' % sdk_hash |
| + |
| + if os.path.isdir(output_dir): |
| + os.removedirs(output_dir) |
| + |
| + bucket = 'gs://fuchsia-build/fuchsia/sdk/linux64/' |
| + with tempfile.NamedTemporaryFile() as f: |
| + cmd = [os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'), |
| + 'cp', bucket + sdk_hash, f.name] |
| + print cmd |
| + subprocess.check_call(cmd) |
| + f.seek(0) |
| + EnsureDirExists(output_dir) |
| + tarfile.open(mode='r:gz', fileobj=f).extractall(path=output_dir) |
| + |
| + with open(hash_filename, 'w') as f: |
| + f.write(sdk_hash) |
| + |
| + |
| +if __name__ == '__main__': |
| + sys.exit(main()) |