OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Rolls DEPS controlled dependency. | 6 """Rolls DEPS controlled dependency. |
7 | 7 |
8 Works only with git checkout and git dependencies. Currently this | 8 Works only with git checkout and git dependencies. Currently this |
9 script will always roll to the tip of to origin/master. | 9 script will always roll to the tip of to origin/master. |
10 """ | 10 """ |
11 | 11 |
12 import argparse | 12 import argparse |
13 import os | 13 import os |
14 import re | 14 import re |
15 import subprocess | 15 import subprocess |
16 import sys | 16 import sys |
17 | 17 |
18 NEED_SHELL = sys.platform.startswith('win') | 18 NEED_SHELL = sys.platform.startswith('win') |
19 | 19 |
| 20 GITILES_REGEX = r'https?://[^/]*\.googlesource\.com/' |
| 21 |
20 | 22 |
21 class Error(Exception): | 23 class Error(Exception): |
22 pass | 24 pass |
23 | 25 |
24 | 26 |
25 def check_output(*args, **kwargs): | 27 def check_output(*args, **kwargs): |
26 """subprocess.check_output() passing shell=True on Windows for git.""" | 28 """subprocess.check_output() passing shell=True on Windows for git.""" |
27 kwargs.setdefault('shell', NEED_SHELL) | 29 kwargs.setdefault('shell', NEED_SHELL) |
28 return subprocess.check_output(*args, **kwargs) | 30 return subprocess.check_output(*args, **kwargs) |
29 | 31 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 | 81 |
80 check_call(['git', 'fetch', 'origin'], cwd=full_dir) | 82 check_call(['git', 'fetch', 'origin'], cwd=full_dir) |
81 master = check_output( | 83 master = check_output( |
82 ['git', 'rev-parse', 'origin/master'], cwd=full_dir).strip() | 84 ['git', 'rev-parse', 'origin/master'], cwd=full_dir).strip() |
83 print('Found new revision %s' % master) | 85 print('Found new revision %s' % master) |
84 | 86 |
85 if master == head: | 87 if master == head: |
86 raise Error('No revision to roll!') | 88 raise Error('No revision to roll!') |
87 | 89 |
88 commit_range = '%s..%s' % (head[:9], master[:9]) | 90 commit_range = '%s..%s' % (head[:9], master[:9]) |
| 91 upstream_url = check_output( |
| 92 ['git', 'config', 'remote.origin.url'], cwd=full_dir).strip() |
89 | 93 |
90 logs = check_output( | 94 log_url = None |
91 ['git', 'log', commit_range, '--date=short', '--format=%ad %ae %s'], | 95 if re.match(GITILES_REGEX, upstream_url): |
92 cwd=full_dir).strip() | 96 log_url = '%s/+log/%s..%s' % (upstream_url, head, master) |
93 logs = re.sub(r'(?m)^(\d\d\d\d-\d\d-\d\d [^@]+)@[^ ]+( .*)$', r'\1\2', logs) | 97 |
94 cmd = 'git log %s --date=short --format=\'%%ad %%ae %%s\'' % commit_range | 98 msg_args = { |
95 reviewer = 'R=%s\n' % ','.join(reviewers) if reviewers else '' | 99 'deps_dir': deps_dir, |
96 bug = 'BUG=%s\n' % bug if bug else '' | 100 'commit_range': commit_range, |
| 101 'log': '%s\n\n' % log_url if log_url else '', |
| 102 'reviewer': 'R=%s\n' % ','.join(reviewers) if reviewers else '', |
| 103 'bug': 'BUG=%s\n' % bug if bug else '', |
| 104 } |
97 msg = ( | 105 msg = ( |
98 'Roll %s/ to %s.\n' | 106 'Roll %(deps_dir)s %(commit_range)s\n' |
99 '\n' | 107 '\n' |
100 '$ %s\n' | 108 '%(log)s' |
101 '%s\n\n' | 109 '%(reviewer)s' |
102 '%s' | 110 '%(bug)s' % msg_args) |
103 '%s') % ( | |
104 deps_dir, | |
105 master, | |
106 cmd, | |
107 logs, | |
108 reviewer, | |
109 bug) | |
110 | 111 |
111 print('Commit message:') | 112 print('Commit message:') |
112 print('\n'.join(' ' + i for i in msg.splitlines())) | 113 print('\n'.join(' ' + i for i in msg.splitlines())) |
113 deps_content = deps_content.replace(head, master) | 114 deps_content = deps_content.replace(head, master) |
114 with open(deps, 'wb') as f: | 115 with open(deps, 'wb') as f: |
115 f.write(deps_content) | 116 f.write(deps_content) |
116 check_call(['git', 'add', 'DEPS'], cwd=root) | 117 check_call(['git', 'add', 'DEPS'], cwd=root) |
117 check_call(['git', 'commit', '-m', msg], cwd=root) | 118 check_call(['git', 'commit', '-m', msg], cwd=root) |
118 print('') | 119 print('') |
119 if not reviewers: | 120 if not reviewers: |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 | 153 |
153 except Error as e: | 154 except Error as e: |
154 sys.stderr.write('error: %s\n' % e) | 155 sys.stderr.write('error: %s\n' % e) |
155 return 1 | 156 return 1 |
156 | 157 |
157 return 0 | 158 return 0 |
158 | 159 |
159 | 160 |
160 if __name__ == '__main__': | 161 if __name__ == '__main__': |
161 sys.exit(main()) | 162 sys.exit(main()) |
OLD | NEW |