| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 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 errno | 10 import errno |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 """Set this branch's issue. If issue=0, clears the issue.""" | 503 """Set this branch's issue. If issue=0, clears the issue.""" |
| 504 if issue: | 504 if issue: |
| 505 RunGit(['config', self._IssueSetting(), str(issue)]) | 505 RunGit(['config', self._IssueSetting(), str(issue)]) |
| 506 if self.rietveld_server: | 506 if self.rietveld_server: |
| 507 RunGit(['config', self._RietveldServer(), self.rietveld_server]) | 507 RunGit(['config', self._RietveldServer(), self.rietveld_server]) |
| 508 else: | 508 else: |
| 509 RunGit(['config', '--unset', self._IssueSetting()]) | 509 RunGit(['config', '--unset', self._IssueSetting()]) |
| 510 self.SetPatchset(0) | 510 self.SetPatchset(0) |
| 511 self.has_issue = False | 511 self.has_issue = False |
| 512 | 512 |
| 513 def RunHook(self, committing, upstream_branch, tbr, may_prompt, verbose): | 513 def RunHook(self, committing, upstream_branch, tbr, may_prompt, verbose, |
| 514 author): |
| 514 """Calls sys.exit() if the hook fails; returns a HookResults otherwise.""" | 515 """Calls sys.exit() if the hook fails; returns a HookResults otherwise.""" |
| 515 root = RunCommand(['git', 'rev-parse', '--show-cdup']).strip() or '.' | 516 root = RunCommand(['git', 'rev-parse', '--show-cdup']).strip() or '.' |
| 516 absroot = os.path.abspath(root) | 517 absroot = os.path.abspath(root) |
| 517 | 518 |
| 518 # We use the sha1 of HEAD as a name of this change. | 519 # We use the sha1 of HEAD as a name of this change. |
| 519 name = RunCommand(['git', 'rev-parse', 'HEAD']).strip() | 520 name = RunCommand(['git', 'rev-parse', 'HEAD']).strip() |
| 520 # Need to pass a relative path for msysgit. | 521 # Need to pass a relative path for msysgit. |
| 521 files = scm.GIT.CaptureStatus([root], upstream_branch) | 522 files = scm.GIT.CaptureStatus([root], upstream_branch) |
| 522 | 523 |
| 523 issue = ConvertToInteger(self.GetIssue()) | 524 issue = ConvertToInteger(self.GetIssue()) |
| 524 patchset = ConvertToInteger(self.GetPatchset()) | 525 patchset = ConvertToInteger(self.GetPatchset()) |
| 525 if issue: | 526 if issue: |
| 526 description = self.GetDescription() | 527 description = self.GetDescription() |
| 527 else: | 528 else: |
| 528 # If the change was never uploaded, use the log messages of all commits | 529 # If the change was never uploaded, use the log messages of all commits |
| 529 # up to the branch point, as git cl upload will prefill the description | 530 # up to the branch point, as git cl upload will prefill the description |
| 530 # with these log messages. | 531 # with these log messages. |
| 531 description = RunCommand(['git', 'log', '--pretty=format:%s%n%n%b', | 532 description = RunCommand(['git', 'log', '--pretty=format:%s%n%n%b', |
| 532 '%s...' % (upstream_branch)]).strip() | 533 '%s...' % (upstream_branch)]).strip() |
| 534 |
| 535 if not author: |
| 536 author = RunGit(['config', 'user.email']) |
| 533 change = presubmit_support.GitChange( | 537 change = presubmit_support.GitChange( |
| 534 name, | 538 name, |
| 535 description, | 539 description, |
| 536 absroot, | 540 absroot, |
| 537 files, | 541 files, |
| 538 issue, | 542 issue, |
| 539 patchset, | 543 patchset, |
| 540 None) | 544 author) |
| 541 | 545 |
| 542 # Apply watchlists on upload. | 546 # Apply watchlists on upload. |
| 543 if not committing: | 547 if not committing: |
| 544 watchlist = watchlists.Watchlists(change.RepositoryRoot()) | 548 watchlist = watchlists.Watchlists(change.RepositoryRoot()) |
| 545 files = [f.LocalPath() for f in change.AffectedFiles()] | 549 files = [f.LocalPath() for f in change.AffectedFiles()] |
| 546 self.SetWatchers(watchlist.GetWatchersForPaths(files)) | 550 self.SetWatchers(watchlist.GetWatchersForPaths(files)) |
| 547 | 551 |
| 548 try: | 552 try: |
| 549 output = presubmit_support.DoPresubmitChecks(change, committing, | 553 output = presubmit_support.DoPresubmitChecks(change, committing, |
| 550 verbose=verbose, output_stream=sys.stdout, input_stream=sys.stdin, | 554 verbose=verbose, output_stream=sys.stdout, input_stream=sys.stdin, |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 return 1 | 890 return 1 |
| 887 | 891 |
| 888 cl = Changelist() | 892 cl = Changelist() |
| 889 if args: | 893 if args: |
| 890 base_branch = args[0] | 894 base_branch = args[0] |
| 891 else: | 895 else: |
| 892 # Default to diffing against the "upstream" branch. | 896 # Default to diffing against the "upstream" branch. |
| 893 base_branch = cl.GetUpstreamBranch() | 897 base_branch = cl.GetUpstreamBranch() |
| 894 | 898 |
| 895 cl.RunHook(committing=not options.upload, upstream_branch=base_branch, | 899 cl.RunHook(committing=not options.upload, upstream_branch=base_branch, |
| 896 tbr=False, may_prompt=False, verbose=options.verbose) | 900 tbr=False, may_prompt=False, verbose=options.verbose, |
| 901 author=None) |
| 897 return 0 | 902 return 0 |
| 898 | 903 |
| 899 | 904 |
| 900 @usage('[args to "git diff"]') | 905 @usage('[args to "git diff"]') |
| 901 def CMDupload(parser, args): | 906 def CMDupload(parser, args): |
| 902 """upload the current changelist to codereview""" | 907 """upload the current changelist to codereview""" |
| 903 parser.add_option('--bypass-hooks', action='store_true', dest='bypass_hooks', | 908 parser.add_option('--bypass-hooks', action='store_true', dest='bypass_hooks', |
| 904 help='bypass upload presubmit hook') | 909 help='bypass upload presubmit hook') |
| 905 parser.add_option('-f', action='store_true', dest='force', | 910 parser.add_option('-f', action='store_true', dest='force', |
| 906 help="force yes to questions (don't prompt)") | 911 help="force yes to questions (don't prompt)") |
| (...skipping 25 matching lines...) Expand all Loading... |
| 932 if args: | 937 if args: |
| 933 base_branch = args[0] | 938 base_branch = args[0] |
| 934 else: | 939 else: |
| 935 # Default to diffing against the "upstream" branch. | 940 # Default to diffing against the "upstream" branch. |
| 936 base_branch = cl.GetUpstreamBranch() | 941 base_branch = cl.GetUpstreamBranch() |
| 937 args = [base_branch + "..."] | 942 args = [base_branch + "..."] |
| 938 | 943 |
| 939 if not options.bypass_hooks and not options.force: | 944 if not options.bypass_hooks and not options.force: |
| 940 hook_results = cl.RunHook(committing=False, upstream_branch=base_branch, | 945 hook_results = cl.RunHook(committing=False, upstream_branch=base_branch, |
| 941 tbr=False, may_prompt=True, | 946 tbr=False, may_prompt=True, |
| 942 verbose=options.verbose) | 947 verbose=options.verbose, |
| 948 author=None) |
| 943 if not options.reviewers and hook_results.reviewers: | 949 if not options.reviewers and hook_results.reviewers: |
| 944 options.reviewers = hook_results.reviewers | 950 options.reviewers = hook_results.reviewers |
| 945 | 951 |
| 946 | 952 |
| 947 # --no-ext-diff is broken in some versions of Git, so try to work around | 953 # --no-ext-diff is broken in some versions of Git, so try to work around |
| 948 # this by overriding the environment (but there is still a problem if the | 954 # this by overriding the environment (but there is still a problem if the |
| 949 # git config key "diff.external" is used). | 955 # git config key "diff.external" is used). |
| 950 env = os.environ.copy() | 956 env = os.environ.copy() |
| 951 if 'GIT_EXTERNAL_DIFF' in env: | 957 if 'GIT_EXTERNAL_DIFF' in env: |
| 952 del env['GIT_EXTERNAL_DIFF'] | 958 del env['GIT_EXTERNAL_DIFF'] |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1087 extra_commits = RunGit(['rev-list', '^' + svn_head, base_branch]) | 1093 extra_commits = RunGit(['rev-list', '^' + svn_head, base_branch]) |
| 1088 if extra_commits: | 1094 if extra_commits: |
| 1089 print ('This branch has %d additional commits not upstreamed yet.' | 1095 print ('This branch has %d additional commits not upstreamed yet.' |
| 1090 % len(extra_commits.splitlines())) | 1096 % len(extra_commits.splitlines())) |
| 1091 print ('Upstream "%s" or rebase this branch on top of the upstream trunk ' | 1097 print ('Upstream "%s" or rebase this branch on top of the upstream trunk ' |
| 1092 'before attempting to %s.' % (base_branch, cmd)) | 1098 'before attempting to %s.' % (base_branch, cmd)) |
| 1093 return 1 | 1099 return 1 |
| 1094 | 1100 |
| 1095 if not options.bypass_hooks and not options.force: | 1101 if not options.bypass_hooks and not options.force: |
| 1096 cl.RunHook(committing=True, upstream_branch=base_branch, | 1102 cl.RunHook(committing=True, upstream_branch=base_branch, |
| 1097 tbr=options.tbr, may_prompt=True, verbose=options.verbose) | 1103 tbr=options.tbr, may_prompt=True, verbose=options.verbose, |
| 1104 author=options.contributor) |
| 1098 | 1105 |
| 1099 if cmd == 'dcommit': | 1106 if cmd == 'dcommit': |
| 1100 # Check the tree status if the tree status URL is set. | 1107 # Check the tree status if the tree status URL is set. |
| 1101 status = GetTreeStatus() | 1108 status = GetTreeStatus() |
| 1102 if 'closed' == status: | 1109 if 'closed' == status: |
| 1103 print ('The tree is closed. Please wait for it to reopen. Use ' | 1110 print ('The tree is closed. Please wait for it to reopen. Use ' |
| 1104 '"git cl dcommit -f" to commit on a closed tree.') | 1111 '"git cl dcommit -f" to commit on a closed tree.') |
| 1105 return 1 | 1112 return 1 |
| 1106 elif 'unknown' == status: | 1113 elif 'unknown' == status: |
| 1107 print ('Unable to determine tree status. Please verify manually and ' | 1114 print ('Unable to determine tree status. Please verify manually and ' |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1472 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) | 1479 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) |
| 1473 | 1480 |
| 1474 # Not a known command. Default to help. | 1481 # Not a known command. Default to help. |
| 1475 GenUsage(parser, 'help') | 1482 GenUsage(parser, 'help') |
| 1476 return CMDhelp(parser, argv) | 1483 return CMDhelp(parser, argv) |
| 1477 | 1484 |
| 1478 | 1485 |
| 1479 if __name__ == '__main__': | 1486 if __name__ == '__main__': |
| 1480 fix_encoding.fix_encoding() | 1487 fix_encoding.fix_encoding() |
| 1481 sys.exit(main(sys.argv[1:])) | 1488 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |