| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """\ | 6 """\ |
| 7 Wrapper script around Rietveld's upload.py that simplifies working with groups | 7 Wrapper script around Rietveld's upload.py that simplifies working with groups |
| 8 of files. | 8 of files. |
| 9 """ | 9 """ |
| 10 | 10 |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 """Sets the description for an issue on Rietveld.""" | 386 """Sets the description for an issue on Rietveld.""" |
| 387 data = [("description", self.description),] | 387 data = [("description", self.description),] |
| 388 ctype, body = upload.EncodeMultipartFormData(data, []) | 388 ctype, body = upload.EncodeMultipartFormData(data, []) |
| 389 self.SendToRietveld('/%d/description' % self.issue, payload=body, | 389 self.SendToRietveld('/%d/description' % self.issue, payload=body, |
| 390 content_type=ctype) | 390 content_type=ctype) |
| 391 | 391 |
| 392 def GetIssueDescription(self): | 392 def GetIssueDescription(self): |
| 393 """Returns the issue description from Rietveld.""" | 393 """Returns the issue description from Rietveld.""" |
| 394 return self.SendToRietveld('/%d/description' % self.issue) | 394 return self.SendToRietveld('/%d/description' % self.issue) |
| 395 | 395 |
| 396 def AddComment(self, comment): |
| 397 """Adds a comment for an issue on Rietveld. |
| 398 As a side effect, this will email everyone associated with the issue.""" |
| 399 return self.RpcServer().add_comment(self.issue, comment) |
| 400 |
| 396 def PrimeLint(self): | 401 def PrimeLint(self): |
| 397 """Do background work on Rietveld to lint the file so that the results are | 402 """Do background work on Rietveld to lint the file so that the results are |
| 398 ready when the issue is viewed.""" | 403 ready when the issue is viewed.""" |
| 399 if self.issue and self.patchset: | 404 if self.issue and self.patchset: |
| 400 self.SendToRietveld('/lint/issue%s_%s' % (self.issue, self.patchset), | 405 self.SendToRietveld('/lint/issue%s_%s' % (self.issue, self.patchset), |
| 401 timeout=10) | 406 timeout=10) |
| 402 | 407 |
| 403 def SendToRietveld(self, request_path, timeout=None, **kwargs): | 408 def SendToRietveld(self, request_path, timeout=None, **kwargs): |
| 404 """Send a POST/GET to Rietveld. Returns the response body.""" | 409 """Send a POST/GET to Rietveld. Returns the response body.""" |
| 405 try: | 410 try: |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 975 | 980 |
| 976 | 981 |
| 977 @need_change_and_args | 982 @need_change_and_args |
| 978 @attrs(usage='[--no_presubmit]') | 983 @attrs(usage='[--no_presubmit]') |
| 979 def CMDcommit(change_info, args): | 984 def CMDcommit(change_info, args): |
| 980 """Commits the changelist to the repository.""" | 985 """Commits the changelist to the repository.""" |
| 981 if not change_info.GetFiles(): | 986 if not change_info.GetFiles(): |
| 982 print "Nothing to commit, changelist is empty." | 987 print "Nothing to commit, changelist is empty." |
| 983 return 1 | 988 return 1 |
| 984 | 989 |
| 990 # OptionallyDoPresubmitChecks has a side-effect which eats these flags. |
| 991 bypassed = '--no_presubmit' in args or '--force' in args |
| 985 output = OptionallyDoPresubmitChecks(change_info, True, args) | 992 output = OptionallyDoPresubmitChecks(change_info, True, args) |
| 986 if not output.should_continue(): | 993 if not output.should_continue(): |
| 987 return 1 | 994 return 1 |
| 988 | 995 |
| 989 # We face a problem with svn here: Let's say change 'bleh' modifies | 996 # We face a problem with svn here: Let's say change 'bleh' modifies |
| 990 # svn:ignore on dir1\. but another unrelated change 'pouet' modifies | 997 # svn:ignore on dir1\. but another unrelated change 'pouet' modifies |
| 991 # dir1\foo.cc. When the user `gcl commit bleh`, foo.cc is *also committed*. | 998 # dir1\foo.cc. When the user `gcl commit bleh`, foo.cc is *also committed*. |
| 992 # The only fix is to use --non-recursive but that has its issues too: | 999 # The only fix is to use --non-recursive but that has its issues too: |
| 993 # Let's say if dir1 is deleted, --non-recursive must *not* be used otherwise | 1000 # Let's say if dir1 is deleted, --non-recursive must *not* be used otherwise |
| 994 # you'll get "svn: Cannot non-recursively commit a directory deletion of a | 1001 # you'll get "svn: Cannot non-recursively commit a directory deletion of a |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1031 if change_info.issue: | 1038 if change_info.issue: |
| 1032 revision = re.compile(".*?\nCommitted revision (\d+)", | 1039 revision = re.compile(".*?\nCommitted revision (\d+)", |
| 1033 re.DOTALL).match(output).group(1) | 1040 re.DOTALL).match(output).group(1) |
| 1034 viewvc_url = GetCodeReviewSetting('VIEW_VC') | 1041 viewvc_url = GetCodeReviewSetting('VIEW_VC') |
| 1035 change_info.description += '\n' | 1042 change_info.description += '\n' |
| 1036 if viewvc_url and revision: | 1043 if viewvc_url and revision: |
| 1037 change_info.description += "\nCommitted: " + viewvc_url + revision | 1044 change_info.description += "\nCommitted: " + viewvc_url + revision |
| 1038 elif revision: | 1045 elif revision: |
| 1039 change_info.description += "\nCommitted: " + revision | 1046 change_info.description += "\nCommitted: " + revision |
| 1040 change_info.CloseIssue() | 1047 change_info.CloseIssue() |
| 1048 comment = "Committed manually as r%s" % revision |
| 1049 comment += ' (presubmit successful).' if not bypassed else '.' |
| 1050 change_info.AddComment(comment) |
| 1041 return 0 | 1051 return 0 |
| 1042 | 1052 |
| 1043 | 1053 |
| 1044 def CMDchange(args): | 1054 def CMDchange(args): |
| 1045 """Creates or edits a changelist. | 1055 """Creates or edits a changelist. |
| 1046 | 1056 |
| 1047 Only scans the current directory and subdirectories. | 1057 Only scans the current directory and subdirectories. |
| 1048 """ | 1058 """ |
| 1049 # Verify the user is running the change command from a read-write checkout. | 1059 # Verify the user is running the change command from a read-write checkout. |
| 1050 svn_info = SVN.CaptureLocalInfo([], '.') | 1060 svn_info = SVN.CaptureLocalInfo([], '.') |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1457 raise | 1467 raise |
| 1458 print >> sys.stderr, ( | 1468 print >> sys.stderr, ( |
| 1459 'AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' | 1469 'AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' |
| 1460 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e)) | 1470 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e)) |
| 1461 return 1 | 1471 return 1 |
| 1462 | 1472 |
| 1463 | 1473 |
| 1464 if __name__ == "__main__": | 1474 if __name__ == "__main__": |
| 1465 fix_encoding.fix_encoding() | 1475 fix_encoding.fix_encoding() |
| 1466 sys.exit(main(sys.argv[1:])) | 1476 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |