Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: tools/safely-roll-deps.py

Issue 260903009: safely-roll-deps: print every command (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sys.stdout.flush Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 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 """Generate a CL to roll a DEPS entry to the specified revision number and post 6 """Generate a CL to roll a DEPS entry to the specified revision number and post
7 it to Rietveld so that the CL will land automatically if it passes the 7 it to Rietveld so that the CL will land automatically if it passes the
8 commit-queue's checks. 8 commit-queue's checks.
9 """ 9 """
10 10
(...skipping 27 matching lines...) Expand all
38 new_content = re.sub(old_line, new_line, content, 1) 38 new_content = re.sub(old_line, new_line, content, 1)
39 old_rev = re.search(old_line, content).group(2) 39 old_rev = re.search(old_line, content).group(2)
40 if not old_rev or new_content == content: 40 if not old_rev or new_content == content:
41 die_with_error('Failed to update the DEPS file') 41 die_with_error('Failed to update the DEPS file')
42 42
43 if not is_dry_run: 43 if not is_dry_run:
44 open(path, 'w').write(new_content) 44 open(path, 'w').write(new_content)
45 return old_rev 45 return old_rev
46 46
47 47
48 class PrintSubprocess(object):
49 """Wrapper for subprocess2 which prints out every command."""
50 def __getattr__(self, attr):
51 def _run_subprocess2(cmd, *args, **kwargs):
52 print cmd
53 sys.stdout.flush()
54 return getattr(subprocess2, attr)(cmd, *args, **kwargs)
55 return _run_subprocess2
56
57 prnt_subprocess = PrintSubprocess()
58
59
48 def main(): 60 def main():
49 tool_dir = os.path.dirname(os.path.abspath(__file__)) 61 tool_dir = os.path.dirname(os.path.abspath(__file__))
50 parser = optparse.OptionParser(usage='%prog [options] <project> <new rev>', 62 parser = optparse.OptionParser(usage='%prog [options] <project> <new rev>',
51 description=sys.modules[__name__].__doc__) 63 description=sys.modules[__name__].__doc__)
52 parser.add_option('-v', '--verbose', action='count', default=0) 64 parser.add_option('-v', '--verbose', action='count', default=0)
53 parser.add_option('--dry-run', action='store_true') 65 parser.add_option('--dry-run', action='store_true')
54 parser.add_option('-f', '--force', action='store_true', 66 parser.add_option('-f', '--force', action='store_true',
55 help='Make destructive changes to the local checkout if ' 67 help='Make destructive changes to the local checkout if '
56 'necessary.') 68 'necessary.')
57 parser.add_option('--commit', action='store_true', default=True, 69 parser.add_option('--commit', action='store_true', default=True,
(...skipping 22 matching lines...) Expand all
80 root_dir = os.path.dirname(tool_dir) 92 root_dir = os.path.dirname(tool_dir)
81 os.chdir(root_dir) 93 os.chdir(root_dir)
82 94
83 project = args[0] 95 project = args[0]
84 new_rev = int(args[1]) 96 new_rev = int(args[1])
85 97
86 # Silence the editor. 98 # Silence the editor.
87 os.environ['EDITOR'] = 'true' 99 os.environ['EDITOR'] = 'true'
88 100
89 if options.force and not options.dry_run: 101 if options.force and not options.dry_run:
90 subprocess2.check_call(['git', 'clean', '-d', '-f']) 102 prnt_subprocess.check_call(['git', 'clean', '-d', '-f'])
91 subprocess2.call(['git', 'rebase', '--abort']) 103 prnt_subprocess.call(['git', 'rebase', '--abort'])
92 104
93 old_branch = scm.GIT.GetBranch(root_dir) 105 old_branch = scm.GIT.GetBranch(root_dir)
94 new_branch = '%s_roll' % project 106 new_branch = '%s_roll' % project
95 107
96 if options.upstream == new_branch: 108 if options.upstream == new_branch:
97 parser.error('Cannot set %s as its own upstream.' % new_branch) 109 parser.error('Cannot set %s as its own upstream.' % new_branch)
98 110
99 if old_branch == new_branch: 111 if old_branch == new_branch:
100 if options.force: 112 if options.force:
101 if not options.dry_run: 113 if not options.dry_run:
102 subprocess2.check_call(['git', 'checkout', options.upstream, '-f']) 114 prnt_subprocess.check_call(['git', 'checkout', options.upstream, '-f'])
103 subprocess2.call(['git', 'branch', '-D', old_branch]) 115 prnt_subprocess.call(['git', 'branch', '-D', old_branch])
104 else: 116 else:
105 parser.error('Please delete the branch %s and move to a different branch' 117 parser.error('Please delete the branch %s and move to a different branch'
106 % new_branch) 118 % new_branch)
107 119
108 if not options.dry_run: 120 if not options.dry_run:
109 subprocess2.check_call(['git', 'fetch', 'origin']) 121 prnt_subprocess.check_call(['git', 'fetch', 'origin'])
110 subprocess2.call(['git', 'svn', 'fetch']) 122 prnt_subprocess.call(['git', 'svn', 'fetch'])
111 branch_cmd = ['git', 'checkout', '-b', new_branch, options.upstream] 123 branch_cmd = ['git', 'checkout', '-b', new_branch, options.upstream]
112 if options.force: 124 if options.force:
113 branch_cmd.append('-f') 125 branch_cmd.append('-f')
114 subprocess2.check_output(branch_cmd) 126 prnt_subprocess.check_output(branch_cmd)
115 127
116 try: 128 try:
117 old_rev = int(process_deps(os.path.join(root_dir, 'DEPS'), project, new_rev, 129 old_rev = int(process_deps(os.path.join(root_dir, 'DEPS'), project, new_rev,
118 options.dry_run)) 130 options.dry_run))
119 print '%s roll %s:%s' % (project.title(), old_rev, new_rev) 131 print '%s roll %s:%s' % (project.title(), old_rev, new_rev)
120 132
121 review_field = 'TBR' if options.commit else 'R' 133 review_field = 'TBR' if options.commit else 'R'
122 commit_msg = options.message or '%s roll %s:%s\n' % (project.title(), 134 commit_msg = options.message or '%s roll %s:%s\n' % (project.title(),
123 old_rev, new_rev) 135 old_rev, new_rev)
124 commit_msg += '\n%s=%s\n' % (review_field, options.reviewers) 136 commit_msg += '\n%s=%s\n' % (review_field, options.reviewers)
125 137
126 if options.dry_run: 138 if options.dry_run:
127 print 'Commit message: ' + commit_msg 139 print 'Commit message: ' + commit_msg
128 return 0 140 return 0
129 141
130 subprocess2.check_output(['git', 'commit', '-m', commit_msg, 'DEPS']) 142 prnt_subprocess.check_output(['git', 'commit', '-m', commit_msg, 'DEPS'])
131 subprocess2.check_call(['git', 'diff', '--no-ext-diff', options.upstream]) 143 prnt_subprocess.check_call(['git', 'diff', '--no-ext-diff',
144 options.upstream])
132 upload_cmd = ['git', 'cl', 'upload'] 145 upload_cmd = ['git', 'cl', 'upload']
133 if options.commit: 146 if options.commit:
134 upload_cmd.append('--use-commit-queue') 147 upload_cmd.append('--use-commit-queue')
135 if options.reviewers: 148 if options.reviewers:
136 upload_cmd.append('--send-mail') 149 upload_cmd.append('--send-mail')
137 if options.cc: 150 if options.cc:
138 upload_cmd.extend(['--cc', options.cc]) 151 upload_cmd.extend(['--cc', options.cc])
139 subprocess2.check_call(upload_cmd) 152 prnt_subprocess.check_call(upload_cmd)
140 finally: 153 finally:
141 if not options.dry_run: 154 if not options.dry_run:
142 subprocess2.check_output(['git', 'checkout', old_branch]) 155 prnt_subprocess.check_output(['git', 'checkout', old_branch])
143 subprocess2.check_output(['git', 'branch', '-D', new_branch]) 156 prnt_subprocess.check_output(['git', 'branch', '-D', new_branch])
144 return 0 157 return 0
145 158
146 159
147 if __name__ == '__main__': 160 if __name__ == '__main__':
148 sys.exit(main()) 161 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698