Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 #!/usr/bin/python | |
| 2 # Copyright 2014 Google Inc. | |
| 3 # | |
| 4 # Use of this source code is governed by a BSD-style license that can be | |
| 5 # found in the LICENSE file. | |
| 6 | |
| 7 | |
| 8 import git_utils | |
| 9 import misc_utils | |
| 10 import os | |
| 11 import subprocess | |
| 12 import sys | |
| 13 | |
| 14 | |
| 15 DEPS_FILE_DIRECTORY = os.path.join(os.path.dirname(__file__), os.pardir) | |
| 16 DEPS_FILE_PATH = os.path.join(DEPS_FILE_DIRECTORY, 'DEPS') | |
| 17 | |
| 18 | |
| 19 def useage(): | |
|
epoger
2014/04/11 18:28:39
useage -> usage
hal.canary
2014/04/11 18:36:21
Done.
| |
| 20 sys.stderr.write( | |
| 21 'Useage: run to grab Skia dependencies, with optional platform support:\n') | |
| 22 sys.stderr.write(' python %s' % __file__) | |
| 23 for deps_os in parse_file_to_dict(DEPS_FILE_PATH)['deps_os']: | |
| 24 sys.stderr.write(' [%s]' % deps_os) | |
| 25 sys.stderr.write('\n\n') | |
| 26 | |
| 27 | |
| 28 def rm_directory_if_exists(directory): | |
| 29 if os.path.isdir(directory) and not os.path.islink(directory): | |
| 30 shutil.rmtree(directory) | |
| 31 elif os.path.lexists(directory): | |
| 32 os.remove(directory) | |
| 33 | |
| 34 | |
| 35 def git_checkout_to_directory(repo, checkoutable, directory, verbose=False): | |
| 36 """Checkout (and clone if needed) a Git repository. | |
| 37 | |
| 38 param repo (string) the location of the repository, suitable | |
| 39 for passing to `git clone`. | |
| 40 | |
| 41 param checkoutable (string) a tag, branch, or commit, suitable for | |
| 42 passing to `git checkout` | |
| 43 | |
| 44 param directory (string) the path into which the repository | |
| 45 should be checked out. | |
| 46 | |
| 47 raises an exception if any calls to git fail. | |
| 48 """ | |
| 49 git = git_utils.git_executable() | |
| 50 assert git | |
| 51 try: | |
| 52 with misc_utils.ChangeDir(directory): | |
| 53 if verbose: | |
| 54 print '%s\n>>>> %s\n>>>> %s\n' % (directory, repo, checkoutable) | |
| 55 subprocess.check_call([git, 'fetch']) | |
| 56 subprocess.check_call([git, 'checkout', '--quiet', checkoutable]) | |
| 57 except: | |
| 58 rm_directory_if_exists(directory) | |
| 59 subprocess.check_call([git, 'clone', repo, directory]) | |
| 60 with misc_utils.ChangeDir(directory): | |
| 61 if verbose: | |
| 62 print '%s\n>>>> %s\n>>>> %s\n' % (directory, repo, checkoutable) | |
| 63 subprocess.check_call([git, 'checkout', '--quiet', checkoutable]) | |
| 64 | |
| 65 | |
| 66 def parse_file_to_dict(path): | |
| 67 dictionary = {} | |
| 68 execfile(path, dictionary) | |
| 69 return dictionary | |
| 70 | |
| 71 | |
| 72 class DepsError(Exception): | |
| 73 pass | |
| 74 | |
| 75 | |
| 76 def main(argv): | |
| 77 deps = parse_file_to_dict(DEPS_FILE_PATH) | |
| 78 dependencies = deps['deps'].copy() | |
| 79 for arg in argv: | |
| 80 # Add OS-specific dependencies | |
| 81 if arg not in deps['deps_os']: | |
| 82 raise DepsError( | |
| 83 'Argument "%s" not found within deps_os keys %r' % | |
| 84 (arg, deps['deps_os'].keys())) | |
| 85 for dep in deps['deps_os'][arg]: | |
| 86 dependencies[dep] = deps['deps_os'][arg][dep] | |
| 87 for directory in dependencies: | |
| 88 if '@' in dependencies[directory]: | |
| 89 repo, checkoutable = dependencies[directory].split('@', 1) | |
| 90 else: | |
| 91 repo, checkoutable = dependencies[directory], 'origin/master' | |
| 92 | |
| 93 with misc_utils.ChangeDir(DEPS_FILE_DIRECTORY): | |
| 94 git_checkout_to_directory(repo, checkoutable, directory, verbose=True) | |
| 95 return 0 | |
| 96 | |
| 97 | |
| 98 if __name__ == '__main__': | |
| 99 try: | |
| 100 main(sys.argv[1:]) | |
| 101 except DepsError: | |
| 102 useage() | |
| 103 exit(1) | |
| 104 | |
| 105 | |
| OLD | NEW |