OLD | NEW |
---|---|
(Empty) | |
1 #!/usr/bin/env python | |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 """Rolls third_party/boringssl/src in DEPS and updates generated build files.""" | |
7 | |
8 import os | |
9 import os.path | |
10 import shutil | |
11 import subprocess | |
12 import sys | |
13 | |
14 | |
15 SCRIPT_PATH = os.path.abspath(__file__) | |
16 SRC_PATH = os.path.dirname(os.path.dirname(os.path.dirname(SCRIPT_PATH))) | |
17 DEPS_PATH = os.path.join(SRC_PATH, 'DEPS') | |
18 BORINGSSL_PATH = os.path.join(SRC_PATH, 'third_party', 'boringssl') | |
19 BORINGSSL_SRC_PATH = os.path.join(BORINGSSL_PATH, 'src') | |
20 | |
21 if not os.path.isfile(DEPS_PATH) or not os.path.isdir(BORINGSSL_SRC_PATH): | |
22 raise Exception('Could not find Chromium checkout') | |
23 | |
24 # Pull OS_ARCH_COMBOS out of the BoringSSL script. | |
25 sys.path.append(os.path.join(BORINGSSL_SRC_PATH, 'util')) | |
26 import generate_build_files | |
davidben
2015/08/28 16:51:31
I'm a terrible person. :-)
| |
27 | |
28 GENERATED_FILES = [ | |
29 'boringssl.gypi', | |
30 'boringssl_tests.gypi', | |
31 'err_data.c', | |
32 ] | |
33 | |
34 | |
35 def IsPristine(repo): | |
36 """Returns True if a git checkout is pristine.""" | |
37 cmd = ['git', 'diff', '--ignore-submodules'] | |
38 return not (subprocess.check_output(cmd, cwd=repo).strip() or | |
39 subprocess.check_output(cmd + ['--cached'], cwd=repo).strip()) | |
40 | |
41 | |
42 def RevParse(repo, rev): | |
43 """Resolves a string to a git commit.""" | |
44 return subprocess.check_output(['git', 'rev-parse', rev], cwd=repo).strip() | |
45 | |
46 | |
47 def UpdateDEPS(deps, from_hash, to_hash): | |
48 """Updates all references of |from_hash| to |to_hash| in |deps|.""" | |
49 with open(deps, 'rb') as f: | |
50 contents = f.read() | |
51 if from_hash not in contents: | |
52 raise Exception('%s not in DEPS' % from_hash) | |
53 contents = contents.replace(from_hash, to_hash) | |
54 with open(deps, 'wb') as f: | |
55 f.write(contents) | |
56 | |
57 | |
58 def main(): | |
59 if len(sys.argv) > 2: | |
60 sys.stderr.write('Usage: %s [COMMIT]' % sys.argv[0]) | |
61 return 1 | |
62 | |
63 if not IsPristine(SRC_PATH): | |
64 print >>sys.stderr, 'Chromium checkout not pristine.' | |
65 return 0 | |
66 if not IsPristine(BORINGSSL_SRC_PATH): | |
67 print >>sys.stderr, 'BoringSSL checkout not pristine.' | |
68 return 0 | |
69 | |
70 if len(sys.argv) > 1: | |
71 commit = RevParse(BORINGSSL_SRC_PATH, sys.argv[1]) | |
72 else: | |
73 subprocess.check_call(['git', 'fetch', 'origin'], cwd=BORINGSSL_SRC_PATH) | |
74 commit = RevParse(BORINGSSL_SRC_PATH, 'origin/master') | |
75 | |
76 head = RevParse(BORINGSSL_SRC_PATH, 'HEAD') | |
77 if head == commit: | |
78 print 'BoringSSL already up-to-date.' | |
79 return 0 | |
80 | |
81 print 'Rolling BoringSSL from %s to %s...' % (head, commit) | |
82 | |
83 UpdateDEPS(DEPS_PATH, head, commit) | |
84 | |
85 # Checkout third_party/boringssl/src to generate new files. | |
86 subprocess.check_call(['git', 'checkout', commit], cwd=BORINGSSL_SRC_PATH) | |
87 | |
88 # Clear the old generated files. | |
89 for (osname, arch, _, _, _) in generate_build_files.OS_ARCH_COMBOS: | |
90 path = os.path.join(BORINGSSL_PATH, osname + '-' + arch) | |
91 shutil.rmtree(path) | |
92 for file in GENERATED_FILES: | |
93 path = os.path.join(BORINGSSL_PATH, file) | |
94 os.unlink(path) | |
95 | |
96 # Generate new ones. | |
97 subprocess.check_call(['python', | |
98 os.path.join(BORINGSSL_SRC_PATH, 'util', | |
99 'generate_build_files.py'), | |
100 'gyp'], | |
101 cwd=BORINGSSL_PATH) | |
102 | |
103 # Commit everything. | |
104 subprocess.check_call(['git', 'add', DEPS_PATH], cwd=SRC_PATH) | |
105 for (osname, arch, _, _, _) in generate_build_files.OS_ARCH_COMBOS: | |
106 path = os.path.join(BORINGSSL_PATH, osname + '-' + arch) | |
107 subprocess.check_call(['git', 'add', path], cwd=SRC_PATH) | |
108 for file in GENERATED_FILES: | |
109 path = os.path.join(BORINGSSL_PATH, file) | |
110 subprocess.check_call(['git', 'add', path], cwd=SRC_PATH) | |
111 | |
112 message = """Roll src/third_party/boringssl/src %s..%s | |
113 | |
114 https://boringssl.googlesource.com/boringssl/+log/%s..%s | |
115 | |
116 BUG=none | |
117 """ % (head[:9], commit[:9], head, commit) | |
118 subprocess.check_call(['git', 'commit', '-m', message], cwd=SRC_PATH) | |
119 | |
120 return 0 | |
121 | |
122 | |
123 if __name__ == '__main__': | |
124 sys.exit(main()) | |
OLD | NEW |