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 # Copyright (C) 2008 Evan Martin <martine@danga.com> | 6 # Copyright (C) 2008 Evan Martin <martine@danga.com> |
7 | 7 |
8 """A git-command for integrating reviews on Rietveld.""" | 8 """A git-command for integrating reviews on Rietveld.""" |
9 | 9 |
10 import json | 10 import json |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 | 502 |
503 def SetPatchset(self, patchset): | 503 def SetPatchset(self, patchset): |
504 """Set this branch's patchset. If patchset=0, clears the patchset.""" | 504 """Set this branch's patchset. If patchset=0, clears the patchset.""" |
505 if patchset: | 505 if patchset: |
506 RunGit(['config', self._PatchsetSetting(), str(patchset)]) | 506 RunGit(['config', self._PatchsetSetting(), str(patchset)]) |
507 else: | 507 else: |
508 RunGit(['config', '--unset', self._PatchsetSetting()], | 508 RunGit(['config', '--unset', self._PatchsetSetting()], |
509 stderr=subprocess2.PIPE, error_ok=True) | 509 stderr=subprocess2.PIPE, error_ok=True) |
510 self.has_patchset = False | 510 self.has_patchset = False |
511 | 511 |
512 def GetPatchSetDiff(self, issue): | 512 def GetMostRecentPatchset(self, issue): |
513 patchset = self.RpcServer().get_issue_properties( | 513 return self.RpcServer().get_issue_properties( |
514 int(issue), False)['patchsets'][-1] | 514 int(issue), False)['patchsets'][-1] |
| 515 |
| 516 def GetPatchSetDiff(self, issue, patchset): |
515 return self.RpcServer().get( | 517 return self.RpcServer().get( |
516 '/download/issue%s_%s.diff' % (issue, patchset)) | 518 '/download/issue%s_%s.diff' % (issue, patchset)) |
517 | 519 |
518 def SetIssue(self, issue): | 520 def SetIssue(self, issue): |
519 """Set this branch's issue. If issue=0, clears the issue.""" | 521 """Set this branch's issue. If issue=0, clears the issue.""" |
520 if issue: | 522 if issue: |
521 RunGit(['config', self._IssueSetting(), str(issue)]) | 523 RunGit(['config', self._IssueSetting(), str(issue)]) |
522 if self.rietveld_server: | 524 if self.rietveld_server: |
523 RunGit(['config', self._RietveldServer(), self.rietveld_server]) | 525 RunGit(['config', self._RietveldServer(), self.rietveld_server]) |
524 else: | 526 else: |
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 if len(args) != 1: | 1398 if len(args) != 1: |
1397 parser.print_help() | 1399 parser.print_help() |
1398 return 1 | 1400 return 1 |
1399 issue_arg = args[0] | 1401 issue_arg = args[0] |
1400 | 1402 |
1401 # TODO(maruel): Use apply_issue.py | 1403 # TODO(maruel): Use apply_issue.py |
1402 # TODO(ukai): use gerrit-cherry-pick for gerrit repository? | 1404 # TODO(ukai): use gerrit-cherry-pick for gerrit repository? |
1403 | 1405 |
1404 if issue_arg.isdigit(): | 1406 if issue_arg.isdigit(): |
1405 # Input is an issue id. Figure out the URL. | 1407 # Input is an issue id. Figure out the URL. |
| 1408 cl = Changelist() |
1406 issue = int(issue_arg) | 1409 issue = int(issue_arg) |
1407 patch_data = Changelist().GetPatchSetDiff(issue) | 1410 patchset = cl.GetMostRecentPatchset(issue) |
| 1411 patch_data = cl.GetPatchSetDiff(issue, patchset) |
1408 else: | 1412 else: |
1409 # Assume it's a URL to the patch. Default to https. | 1413 # Assume it's a URL to the patch. Default to https. |
1410 issue_url = gclient_utils.UpgradeToHttps(issue_arg) | 1414 issue_url = gclient_utils.UpgradeToHttps(issue_arg) |
1411 match = re.match(r'.*?/issue(\d+)_\d+.diff', issue_url) | 1415 match = re.match(r'.*?/issue(\d+)_(\d+).diff', issue_url) |
1412 if not match: | 1416 if not match: |
1413 DieWithError('Must pass an issue ID or full URL for ' | 1417 DieWithError('Must pass an issue ID or full URL for ' |
1414 '\'Download raw patch set\'') | 1418 '\'Download raw patch set\'') |
1415 issue = int(match.group(1)) | 1419 issue = int(match.group(1)) |
| 1420 patchset = int(match.group(2)) |
1416 patch_data = urllib2.urlopen(issue_arg).read() | 1421 patch_data = urllib2.urlopen(issue_arg).read() |
1417 | 1422 |
1418 if options.newbranch: | 1423 if options.newbranch: |
1419 if options.force: | 1424 if options.force: |
1420 RunGit(['branch', '-D', options.newbranch], | 1425 RunGit(['branch', '-D', options.newbranch], |
1421 stderr=subprocess2.PIPE, error_ok=True) | 1426 stderr=subprocess2.PIPE, error_ok=True) |
1422 RunGit(['checkout', '-b', options.newbranch, | 1427 RunGit(['checkout', '-b', options.newbranch, |
1423 Changelist().GetUpstreamBranch()]) | 1428 Changelist().GetUpstreamBranch()]) |
1424 | 1429 |
1425 # Switch up to the top-level directory, if necessary, in preparation for | 1430 # Switch up to the top-level directory, if necessary, in preparation for |
(...skipping 21 matching lines...) Expand all Loading... |
1447 try: | 1452 try: |
1448 subprocess2.check_call(cmd, stdin=patch_data, stdout=subprocess2.VOID) | 1453 subprocess2.check_call(cmd, stdin=patch_data, stdout=subprocess2.VOID) |
1449 except subprocess2.CalledProcessError: | 1454 except subprocess2.CalledProcessError: |
1450 DieWithError('Failed to apply the patch') | 1455 DieWithError('Failed to apply the patch') |
1451 | 1456 |
1452 # If we had an issue, commit the current state and register the issue. | 1457 # If we had an issue, commit the current state and register the issue. |
1453 if not options.nocommit: | 1458 if not options.nocommit: |
1454 RunGit(['commit', '-m', 'patch from issue %s' % issue]) | 1459 RunGit(['commit', '-m', 'patch from issue %s' % issue]) |
1455 cl = Changelist() | 1460 cl = Changelist() |
1456 cl.SetIssue(issue) | 1461 cl.SetIssue(issue) |
| 1462 cl.SetPatchset(patchset) |
1457 print "Committed patch." | 1463 print "Committed patch." |
1458 else: | 1464 else: |
1459 print "Patch applied to index." | 1465 print "Patch applied to index." |
1460 return 0 | 1466 return 0 |
1461 | 1467 |
1462 | 1468 |
1463 def CMDrebase(parser, args): | 1469 def CMDrebase(parser, args): |
1464 """rebase current branch on top of svn repo""" | 1470 """rebase current branch on top of svn repo""" |
1465 # Provide a wrapper for git svn rebase to help avoid accidental | 1471 # Provide a wrapper for git svn rebase to help avoid accidental |
1466 # git svn dcommit. | 1472 # git svn dcommit. |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1580 builders_and_tests.setdefault(bot, []).append('defaulttests') | 1586 builders_and_tests.setdefault(bot, []).append('defaulttests') |
1581 | 1587 |
1582 if options.testfilter: | 1588 if options.testfilter: |
1583 forced_tests = sum((t.split(',') for t in options.testfilter), []) | 1589 forced_tests = sum((t.split(',') for t in options.testfilter), []) |
1584 builders_and_tests = dict( | 1590 builders_and_tests = dict( |
1585 (b, forced_tests) for b, t in builders_and_tests.iteritems() | 1591 (b, forced_tests) for b, t in builders_and_tests.iteritems() |
1586 if t != ['compile']) | 1592 if t != ['compile']) |
1587 | 1593 |
1588 patchset = cl.GetPatchset() | 1594 patchset = cl.GetPatchset() |
1589 if not cl.GetPatchset(): | 1595 if not cl.GetPatchset(): |
1590 properties = cl.RpcServer().get_issue_properties(cl.GetIssue(), False) | 1596 patchset = cl.GetMostRecentPatchset(cl.GetIssue()) |
1591 patchset = properties['patchsets'][-1] | |
1592 | 1597 |
1593 cl.RpcServer().trigger_try_jobs( | 1598 cl.RpcServer().trigger_try_jobs( |
1594 cl.GetIssue(), patchset, options.name, options.clobber, options.revision, | 1599 cl.GetIssue(), patchset, options.name, options.clobber, options.revision, |
1595 builders_and_tests) | 1600 builders_and_tests) |
1596 return 0 | 1601 return 0 |
1597 | 1602 |
1598 | 1603 |
1599 @usage('[new upstream branch]') | 1604 @usage('[new upstream branch]') |
1600 def CMDupstream(parser, args): | 1605 def CMDupstream(parser, args): |
1601 """prints or sets the name of the upstream branch, if any""" | 1606 """prints or sets the name of the upstream branch, if any""" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1699 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) | 1704 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) |
1700 | 1705 |
1701 # Not a known command. Default to help. | 1706 # Not a known command. Default to help. |
1702 GenUsage(parser, 'help') | 1707 GenUsage(parser, 'help') |
1703 return CMDhelp(parser, argv) | 1708 return CMDhelp(parser, argv) |
1704 | 1709 |
1705 | 1710 |
1706 if __name__ == '__main__': | 1711 if __name__ == '__main__': |
1707 fix_encoding.fix_encoding() | 1712 fix_encoding.fix_encoding() |
1708 sys.exit(main(sys.argv[1:])) | 1713 sys.exit(main(sys.argv[1:])) |
OLD | NEW |