blob: 0c7364c69d79c1c121ce09eb652d1a51c95f9a51 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2019 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.
"""
Used to download a pre-built version of Chrome for running unit tests
"""
import argparse
import os
import shutil
import sys
import urllib
import zipfile
def parse_options(cli_args):
parser = argparse.ArgumentParser(description='Download Chromium')
parser.add_argument('url', help='download URL')
parser.add_argument('target', help='target directory')
parser.add_argument('path_to_binary', help='path to binary inside of the zip archive')
parser.add_argument('build_number', help='build number to find out whether we need to re-download')
return parser.parse_args(cli_args)
def download_and_extract(options):
BUILD_NUMBER_FILE = os.path.join(options.target, 'build_number')
EXPECTED_BINARY = os.path.join(options.target, options.path_to_binary)
# Check whether we already downloaded pre-built Chromium of right build number
if os.path.exists(BUILD_NUMBER_FILE):
with open(BUILD_NUMBER_FILE) as file:
build_number = file.read().strip()
if build_number == options.build_number:
assert os.path.exists(EXPECTED_BINARY)
return
# Remove previous download
if os.path.exists(options.target):
shutil.rmtree(options.target)
# Download again and save build number
filehandle, headers = urllib.urlretrieve(options.url)
zip_file = zipfile.ZipFile(filehandle, 'r')
zip_file.extractall(path=options.target)
# Fix permissions. Do this recursively is necessary for MacOS bundles.
if os.path.isfile(EXPECTED_BINARY):
os.chmod(EXPECTED_BINARY, 0o555)
else:
for root, dirs, files in os.walk(EXPECTED_BINARY):
for f in files:
os.chmod(os.path.join(root, f), 0o555)
with open(BUILD_NUMBER_FILE, 'w') as file:
file.write(options.build_number)
if __name__ == '__main__':
OPTIONS = parse_options(sys.argv[1:])
download_and_extract(OPTIONS)