112 строки
3.0 KiB
Python
Executable File
112 строки
3.0 KiB
Python
Executable File
#!/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. Should be used in a 'hooks_os'
|
|
entry so that it only runs when .gclient's target_os includes 'fuchsia'."""
|
|
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tarfile
|
|
import tempfile
|
|
|
|
SDK_HASH_FILE = os.path.join(os.path.dirname(__file__), 'sdk.sha1')
|
|
|
|
REPOSITORY_ROOT = os.path.abspath(os.path.join(
|
|
os.path.dirname(__file__), '..', '..'))
|
|
sys.path.append(os.path.join(REPOSITORY_ROOT, 'build'))
|
|
|
|
import find_depot_tools
|
|
|
|
SDK_SUBDIRS = ["arch", "pkg", "qemu", "sysroot", "target",
|
|
"toolchain_libs", "tools"]
|
|
|
|
|
|
def EnsureDirExists(path):
|
|
if not os.path.exists(path):
|
|
print 'Creating directory %s' % path
|
|
os.makedirs(path)
|
|
|
|
|
|
# Removes previous SDK from the specified path if it's detected there.
|
|
def Cleanup(path):
|
|
hash_file = os.path.join(path, '.hash')
|
|
if os.path.exists(hash_file):
|
|
print 'Removing old SDK from %s.' % path
|
|
for d in SDK_SUBDIRS:
|
|
to_remove = os.path.join(path, d)
|
|
if os.path.isdir(to_remove):
|
|
shutil.rmtree(to_remove)
|
|
os.remove(hash_file)
|
|
|
|
|
|
# Updates the modification timestamps of |path| and its contents to the
|
|
# current time.
|
|
def UpdateTimestampsRecursive(path):
|
|
for root, dirs, files in os.walk(path):
|
|
for f in files:
|
|
os.utime(os.path.join(root, f), None)
|
|
for d in dirs:
|
|
os.utime(os.path.join(root, d), None)
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) != 1:
|
|
print >>sys.stderr, 'usage: %s' % sys.argv[0]
|
|
return 1
|
|
|
|
# Previously SDK was unpacked in //third_party/fuchsia-sdk instead of
|
|
# //third_party/fuchsia-sdk/sdk . Remove the old files if they are still
|
|
# there.
|
|
Cleanup(os.path.join(REPOSITORY_ROOT, 'third_party', 'fuchsia-sdk'))
|
|
|
|
with open(SDK_HASH_FILE, 'r') as f:
|
|
sdk_hash = f.read().strip()
|
|
|
|
if not sdk_hash:
|
|
print >>sys.stderr, 'No SHA1 found in %s' % SDK_HASH_FILE
|
|
return 1
|
|
|
|
output_dir = os.path.join(REPOSITORY_ROOT, 'third_party', 'fuchsia-sdk',
|
|
'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):
|
|
shutil.rmtree(output_dir)
|
|
|
|
fd, tmp = tempfile.mkstemp()
|
|
os.close(fd)
|
|
|
|
try:
|
|
bucket = 'gs://fuchsia/sdk/linux-amd64/'
|
|
cmd = [os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'),
|
|
'cp', bucket + sdk_hash, tmp]
|
|
subprocess.check_call(cmd)
|
|
with open(tmp, 'rb') as f:
|
|
EnsureDirExists(output_dir)
|
|
tarfile.open(mode='r:gz', fileobj=f).extractall(path=output_dir)
|
|
finally:
|
|
os.remove(tmp)
|
|
|
|
with open(hash_filename, 'w') as f:
|
|
f.write(sdk_hash)
|
|
|
|
UpdateTimestampsRecursive(output_dir)
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|