OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2009 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 # Tool to quickly revert a change. | 6 # Tool to quickly revert a change. |
7 | 7 |
8 import exceptions | 8 import exceptions |
9 import optparse | 9 import optparse |
10 import os | 10 import os |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 reviewers overrides the blames email addresses for review email.""" | 85 reviewers overrides the blames email addresses for review email.""" |
86 | 86 |
87 # Use the oldest revision as the primary revision. | 87 # Use the oldest revision as the primary revision. |
88 changename = "revert%d" % revisions[len(revisions)-1] | 88 changename = "revert%d" % revisions[len(revisions)-1] |
89 if not force and os.path.exists(gcl.GetChangelistInfoFile(changename)): | 89 if not force and os.path.exists(gcl.GetChangelistInfoFile(changename)): |
90 print "Error, change %s already exist." % changename | 90 print "Error, change %s already exist." % changename |
91 return 1 | 91 return 1 |
92 | 92 |
93 # Move to the repository root and make the revision numbers sorted in | 93 # Move to the repository root and make the revision numbers sorted in |
94 # decreasing order. | 94 # decreasing order. |
95 os.chdir(gcl.GetRepositoryRoot()) | 95 local_root = gcl.GetRepositoryRoot() |
| 96 os.chdir(local_root) |
96 revisions.sort(reverse=True) | 97 revisions.sort(reverse=True) |
97 revisions_string = ",".join([str(rev) for rev in revisions]) | 98 revisions_string = ",".join([str(rev) for rev in revisions]) |
98 revisions_string_rev = ",".join([str(-rev) for rev in revisions]) | 99 revisions_string_rev = ",".join([str(-rev) for rev in revisions]) |
99 | 100 |
100 # Get all the modified files by the revision. We'll use this list to optimize | 101 # Get all the modified files by the revision. We'll use this list to optimize |
101 # the svn merge. | 102 # the svn merge. |
102 logs = [] | 103 logs = [] |
103 for revision in revisions: | 104 for revision in revisions: |
104 logs.extend(CaptureSVNLog(["-r", str(revision), "-v"])) | 105 logs.extend(CaptureSVNLog(["-r", str(revision), "-v"])) |
105 | 106 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 os.chdir('..') | 215 os.chdir('..') |
215 | 216 |
216 # Transform files_status from a dictionary to a list of tuple. | 217 # Transform files_status from a dictionary to a list of tuple. |
217 files_status = [(files_status[file], file) for file in files] | 218 files_status = [(files_status[file], file) for file in files] |
218 | 219 |
219 description = "Reverting %s." % revisions_string | 220 description = "Reverting %s." % revisions_string |
220 if message: | 221 if message: |
221 description += "\n\n" | 222 description += "\n\n" |
222 description += message | 223 description += message |
223 # Don't use gcl.Change() since it prompts the user for infos. | 224 # Don't use gcl.Change() since it prompts the user for infos. |
224 change_info = gcl.ChangeInfo(name=changename, issue='', | 225 change_info = gcl.ChangeInfo(changename, 0, 0, description, files_status, |
225 description=description, files=files_status) | 226 local_root) |
226 change_info.Save() | 227 change_info.Save() |
227 | 228 |
228 upload_args = ['--no_presubmit', '-r', ",".join(reviewers)] | 229 upload_args = ['--no_presubmit', '-r', ",".join(reviewers)] |
229 if send_email: | 230 if send_email: |
230 upload_args.append('--send_mail') | 231 upload_args.append('--send_mail') |
231 if commit: | 232 if commit: |
232 upload_args.append('--no_try') | 233 upload_args.append('--no_try') |
233 gcl.UploadCL(change_info, upload_args) | 234 gcl.UploadCL(change_info, upload_args) |
234 | 235 |
235 retcode = 0 | 236 retcode = 0 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 print "".join(e.args) | 285 print "".join(e.args) |
285 print "You can use the --force flag to revert the files." | 286 print "You can use the --force flag to revert the files." |
286 except OutsideOfCheckout, e: | 287 except OutsideOfCheckout, e: |
287 print "Your repository doesn't contain ", str(e) | 288 print "Your repository doesn't contain ", str(e) |
288 | 289 |
289 return retcode | 290 return retcode |
290 | 291 |
291 | 292 |
292 if __name__ == "__main__": | 293 if __name__ == "__main__": |
293 sys.exit(Main(sys.argv)) | 294 sys.exit(Main(sys.argv)) |
OLD | NEW |