| #!/usr/bin/env python | 
 | # Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file | 
 | # for details. All rights reserved. Use of this source code is governed by a | 
 | # BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | # Script for downloading from x20 a dependency in the same way we use cloud | 
 | # storage. | 
 |  | 
 | import optparse | 
 | import os | 
 | import shutil | 
 | import subprocess | 
 | import sys | 
 | import tarfile | 
 | import utils | 
 |  | 
 | GMSCORE_DEPS = '/google/data/ro/teams/r8/deps' | 
 |  | 
 | def parse_options(): | 
 |   return optparse.OptionParser().parse_args() | 
 |  | 
 | def extract_dir(filename): | 
 |   return filename[0:len(filename) - len('.tar.gz')] | 
 |  | 
 | def unpack_archive(filename): | 
 |   dest_dir = extract_dir(filename) | 
 |   if os.path.exists(dest_dir): | 
 |     print 'Deleting existing dir %s' % dest_dir | 
 |     shutil.rmtree(dest_dir) | 
 |   dirname = os.path.dirname(os.path.abspath(filename)) | 
 |   with tarfile.open(filename, 'r:gz') as tar: | 
 |     tar.extractall(path=dirname) | 
 |  | 
 | def Main(): | 
 |   (options, args) = parse_options() | 
 |   assert len(args) == 1 | 
 |   sha1_file = args[0] | 
 |   dest = sha1_file[:-5] | 
 |   print 'Ensuring %s' % dest | 
 |   with open(sha1_file, 'r') as input_sha: | 
 |     sha1 = input_sha.readline() | 
 |   if os.path.exists(dest) and utils.get_sha1(dest) == sha1: | 
 |     print 'sha1 matches, not downloading' | 
 |     dest_dir = extract_dir(dest) | 
 |     if os.path.exists(dest_dir): | 
 |       print 'destination directory exists, no extraction' | 
 |     else: | 
 |       unpack_archive(dest) | 
 |     return | 
 |   src = os.path.join(GMSCORE_DEPS, sha1) | 
 |   if not os.path.exists(src): | 
 |     print 'File (%s) does not exist on x20' % src | 
 |     print 'Maybe pass -Pno_internal to your gradle invocation' | 
 |     return 42 | 
 |   print 'Downloading %s to %s' % (src, dest) | 
 |   shutil.copyfile(src, dest) | 
 |   unpack_archive(dest) | 
 |  | 
 | if __name__ == '__main__': | 
 |   sys.exit(Main()) |