blob: 612be8943bf7f7a0bc20ac7bba2b2448947e675e [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2016 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.
"""
Uploads or downloads third party libraries to or from google cloud storage.
"""
import argparse
import logging
import os
import sys
sys.path.append(os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir)))
from pylib import constants
from pylib.constants import host_paths
sys.path.append(os.path.abspath(
os.path.join(host_paths.DIR_SOURCE_ROOT, 'build')))
import find_depot_tools # pylint: disable=import-error,unused-import
import download_from_google_storage
import upload_to_google_storage
def _AddBasicArguments(parser):
parser.add_argument(
'--sdk-root', default=constants.ANDROID_SDK_ROOT,
help='base path to the Android SDK root')
parser.add_argument(
'-v', '--verbose', action='store_true', help='print debug information')
parser.add_argument(
'-b', '--bucket-path', required=True,
help='The path of the lib file in Google Cloud Storage.')
parser.add_argument(
'-l', '--local-path', required=True,
help='The base path of the third_party directory')
def _CheckPaths(bucket_path, local_path):
if bucket_path.startswith('gs://'):
bucket_url = bucket_path
else:
bucket_url = 'gs://%s' % bucket_path
local_path = os.path.join(host_paths.DIR_SOURCE_ROOT, local_path)
if not os.path.isdir(local_path):
raise IOError(
'The library local path is not a valid directory: %s' % local_path)
return bucket_url, local_path
def _CheckFileList(local_path, file_list):
local_path = os.path.abspath(local_path)
abs_path_list = [os.path.abspath(f) for f in file_list]
for f in abs_path_list:
if os.path.commonprefix([f, local_path]) != local_path:
raise IOError(
'%s in the arguments are not decendants of the specified directory %s'
% (f, local_path))
return abs_path_list
def Upload(arguments):
"""Upload files in a third_party directory to google storage"""
bucket_url, local_path = _CheckPaths(arguments.bucket_path,
arguments.local_path)
file_list = _CheckFileList(local_path, arguments.file_list)
upload_to_google_storage.upload_to_google_storage(
input_filenames=file_list,
base_url=bucket_url,
gsutil=arguments.gsutil,
force=False,
use_md5=False,
num_threads=1,
skip_hashing=False,
gzip=None)
def Download(arguments):
"""Download files based on sha1 files in a third_party dir from gcs"""
bucket_url, local_path = _CheckPaths(arguments.bucket_path,
arguments.local_path)
download_from_google_storage.download_from_google_storage(
local_path,
bucket_url,
gsutil=arguments.gsutil,
num_threads=1,
directory=True,
recursive=True,
force=False,
output=None,
ignore_errors=False,
sha1_file=None,
verbose=arguments.verbose,
auto_platform=False,
extract=False)
def main(argv):
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title='commands')
download_parser = subparsers.add_parser(
'download', help='download the library from the cloud storage')
_AddBasicArguments(download_parser)
download_parser.set_defaults(func=Download)
upload_parser = subparsers.add_parser(
'upload', help='find all jar files in a third_party directory and ' +
'upload them to cloud storage')
_AddBasicArguments(upload_parser)
upload_parser.set_defaults(func=Upload)
upload_parser.add_argument(
'-f', '--file-list', nargs='+', required=True,
help='A list of base paths for files in third_party to upload.')
arguments = parser.parse_args(argv)
if not os.path.isdir(arguments.sdk_root):
logging.debug('Did not find the Android SDK root directory at "%s".',
arguments.sdk_root)
logging.info('Skipping, not on an android checkout.')
return 0
arguments.gsutil = download_from_google_storage.Gsutil(
download_from_google_storage.GSUTIL_DEFAULT_PATH)
return arguments.func(arguments)
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))