mirror of
https://github.com/dart-lang/sdk
synced 2024-11-05 18:22:09 +00:00
66c9109caf
#33659 Change-Id: I94fccf4bbce2f0140bf0d6efa953d44b290df856 Reviewed-on: https://dart-review.googlesource.com/62840 Commit-Queue: Alexander Thomas <athom@google.com> Reviewed-by: William Hesse <whesse@google.com> Reviewed-by: Zach Anderson <zra@google.com>
84 lines
2.6 KiB
Python
Executable file
84 lines
2.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# Copyright 2016 The Dart project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# This script downloads the latest dev SDK from
|
|
# http://gsdview.appspot.com/dart-archive/channels/dev/raw/latest/sdk/
|
|
# into tools/sdks/. It is intended to be invoked from Jiri hooks in
|
|
# a Fuchsia checkout.
|
|
|
|
import os
|
|
import sys
|
|
import zipfile
|
|
import urllib
|
|
import utils
|
|
|
|
HOST_OS = utils.GuessOS()
|
|
HOST_ARCH = utils.GuessArchitecture()
|
|
SCRIPT_DIR = os.path.dirname(sys.argv[0])
|
|
DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..'))
|
|
|
|
DEFAULT_DART_VERSION = 'latest'
|
|
BASE_URL = 'http://gsdview.appspot.com/dart-archive/channels/dev/raw/%s/sdk/%s'
|
|
|
|
def host_os_for_sdk(host_os):
|
|
if host_os.startswith('macos'):
|
|
return 'mac'
|
|
if host_os.startswith('win'):
|
|
return 'windows'
|
|
return host_os
|
|
|
|
# Python's zipfile doesn't preserve file permissions during extraction, so we
|
|
# have to do it manually.
|
|
def extract_file(zf, info, extract_dir):
|
|
try:
|
|
zf.extract(info.filename, path=extract_dir)
|
|
out_path = os.path.join(extract_dir, info.filename)
|
|
perm = info.external_attr >> 16L
|
|
os.chmod(out_path, perm)
|
|
except IOError as err:
|
|
if 'dart-sdk/bin/dart' in err.filename:
|
|
print('Failed to extract the new Dart SDK dart binary. ' +
|
|
'Kill stale instances (like the analyzer) and try the update again')
|
|
return False
|
|
raise
|
|
return True
|
|
|
|
def main(argv):
|
|
host_os = host_os_for_sdk(HOST_OS)
|
|
zip_file = ('dartsdk-%s-x64-release.zip' % HOST_OS)
|
|
sha_file = zip_file + '.sha256sum'
|
|
sdk_path = os.path.join(DART_ROOT, 'tools', 'sdks')
|
|
local_sha_path = os.path.join(sdk_path, sha_file)
|
|
remote_sha_path = os.path.join(sdk_path, sha_file + '.remote')
|
|
zip_path = os.path.join(sdk_path, zip_file)
|
|
|
|
sdk_version = DEFAULT_DART_VERSION
|
|
sha_url = (BASE_URL % (sdk_version, sha_file))
|
|
zip_url = (BASE_URL % (sdk_version, zip_file))
|
|
|
|
local_sha = ''
|
|
if os.path.isfile(local_sha_path):
|
|
with open(local_sha_path, 'r') as fp:
|
|
local_sha = fp.read()
|
|
|
|
remote_sha = ''
|
|
urllib.urlretrieve(sha_url, remote_sha_path)
|
|
with open(remote_sha_path, 'r') as fp:
|
|
remote_sha = fp.read()
|
|
os.remove(remote_sha_path)
|
|
|
|
if local_sha == '' or local_sha != remote_sha:
|
|
print 'Downloading prebuilt Dart SDK from: ' + zip_url
|
|
urllib.urlretrieve(zip_url, zip_path)
|
|
with zipfile.ZipFile(zip_path, 'r') as zf:
|
|
for info in zf.infolist():
|
|
if not extract_file(zf, info, sdk_path):
|
|
return -1
|
|
with open(local_sha_path, 'w') as fp:
|
|
fp.write(remote_sha)
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv))
|