|  | #!/usr/bin/env python | 
|  | # Copyright (c) 2017, 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. | 
|  |  | 
|  | from os.path import basename, join | 
|  | from shutil import copy2 | 
|  | from subprocess import check_call | 
|  | import argparse | 
|  | import multiprocessing | 
|  | import os | 
|  | import sys | 
|  |  | 
|  | import utils | 
|  | import utils_aosp | 
|  |  | 
|  | AOSP_MANIFEST_XML = join(utils.REPO_ROOT, 'third_party', | 
|  | 'aosp_manifest.xml') | 
|  | AOSP_MANIFEST_URL = 'https://android.googlesource.com/platform/manifest' | 
|  | J_DEFAULT = multiprocessing.cpu_count() - 2 | 
|  |  | 
|  | # Checkout AOSP source to the specified direcotry using the speficied manifest. | 
|  | def checkout_aosp(aosp_root, url, branch, manifest_xml, concurrency, shallow): | 
|  | utils.makedirs_if_needed(aosp_root) | 
|  | command = ['repo', 'init', '-u', url] | 
|  | if (shallow): | 
|  | command.extend(['--depth=1']) | 
|  | if (branch): | 
|  | command.extend(['-b', branch]) | 
|  | else: | 
|  | manifests_dir = join(aosp_root, '.repo', 'manifests') | 
|  | utils.makedirs_if_needed(manifests_dir) | 
|  | copy2(manifest_xml, manifests_dir) | 
|  | command.extend(['-m', basename(manifest_xml)]) | 
|  | check_call(command, cwd = aosp_root) | 
|  |  | 
|  | check_call(['repo', 'sync', '-dq', '-j' + concurrency], cwd = aosp_root) | 
|  |  | 
|  | def parse_arguments(): | 
|  | parser = argparse.ArgumentParser( | 
|  | description = 'Checkout the AOSP source tree.') | 
|  | utils_aosp.add_root_argument(parser) | 
|  | parser.add_argument('--url', | 
|  | help='URL the repo. ' + | 
|  | 'Defaults to ' + AOSP_MANIFEST_URL + '.', | 
|  | default=AOSP_MANIFEST_URL) | 
|  | parser.add_argument('--manifest', | 
|  | help='Manifest to use for the checkout. ' + | 
|  | 'Defaults to ' + AOSP_MANIFEST_XML + '.', | 
|  | default=AOSP_MANIFEST_XML) | 
|  | parser.add_argument('--branch', | 
|  | help='Branch to checkout. This overrides ' + | 
|  | 'passing --manifest') | 
|  | parser.add_argument('--shallow', | 
|  | action = 'store_true', | 
|  | help='Shallow checkout.') | 
|  | parser.add_argument('-j', | 
|  | help='Projects to fetch simultaneously. ' + | 
|  | 'Defaults to ' + str(J_DEFAULT) + '.', | 
|  | default=str(J_DEFAULT)) | 
|  | return parser.parse_args() | 
|  |  | 
|  | def Main(): | 
|  | args = parse_arguments() | 
|  | checkout_aosp(args.aosp_root, args.url, args.branch, args.manifest, | 
|  | args.j, args.shallow) | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(Main()) |