You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.1 KiB
77 lines
2.1 KiB
4 months ago
|
#!/usr/bin/env python
|
||
|
# Copyright 2020 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.
|
||
|
"""
|
||
|
This script is used to download YAJSV (yet another json schema validator). It
|
||
|
runs as a gclient hook.
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import curlish
|
||
|
import os
|
||
|
import stat
|
||
|
import sys
|
||
|
|
||
|
RELEASES_DOWNLOAD_URL = 'https://github.com/neilpa/yajsv/releases/download/'
|
||
|
VERSION = 'v1.4.0'
|
||
|
YAJSV_FLAVOR_DICT = {
|
||
|
'linux32': 'yajsv.linux.386',
|
||
|
'linux64': 'yajsv.linux.amd64',
|
||
|
'mac64': 'yajsv.darwin.amd64'
|
||
|
}
|
||
|
|
||
|
PLATFORM_MAP = {'linux2': 'linux', 'darwin': 'mac'}
|
||
|
|
||
|
|
||
|
def get_bitness():
|
||
|
# According to the python docs, this is more reliable than
|
||
|
# querying platform.architecture().
|
||
|
if sys.maxsize > 2**32:
|
||
|
return '64'
|
||
|
return '32'
|
||
|
|
||
|
|
||
|
def get_platform():
|
||
|
return PLATFORM_MAP.get(sys.platform, sys.platform)
|
||
|
|
||
|
|
||
|
def get_flavor():
|
||
|
return "{}{}".format(get_platform(), get_bitness())
|
||
|
|
||
|
|
||
|
def main():
|
||
|
parser = argparse.ArgumentParser(description='Download a YAJSV release.')
|
||
|
parser.add_argument('--flavor',
|
||
|
help='Flavor to download (currently one of {})'.format(
|
||
|
', '.join(YAJSV_FLAVOR_DICT.keys())))
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
flavor = args.flavor
|
||
|
if not flavor:
|
||
|
flavor = get_flavor()
|
||
|
if flavor in YAJSV_FLAVOR_DICT:
|
||
|
print('flavor not provided, defaulting to ' + flavor)
|
||
|
|
||
|
if flavor not in YAJSV_FLAVOR_DICT:
|
||
|
print('could not find an appropriate flavor, "{}" is invalid'.format(
|
||
|
flavor))
|
||
|
return 1
|
||
|
|
||
|
output_path = os.path.abspath(
|
||
|
os.path.join(os.path.dirname(os.path.relpath(__file__)), 'yajsv'))
|
||
|
download_url = '{}{}/{}'.format(RELEASES_DOWNLOAD_URL, VERSION,
|
||
|
YAJSV_FLAVOR_DICT[flavor])
|
||
|
result = curlish.curlish(download_url, output_path)
|
||
|
|
||
|
# YAJSV isn't useful if it's not executable.
|
||
|
if result:
|
||
|
current_mode = os.stat(output_path).st_mode
|
||
|
os.chmod(output_path, current_mode | stat.S_IEXEC)
|
||
|
|
||
|
return 0 if result else 1
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.exit(main())
|