| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 | 44 |
| 45 # Initialized in main() | 45 # Initialized in main() |
| 46 settings = None | 46 settings = None |
| 47 | 47 |
| 48 | 48 |
| 49 def DieWithError(message): | 49 def DieWithError(message): |
| 50 print >> sys.stderr, message | 50 print >> sys.stderr, message |
| 51 sys.exit(1) | 51 sys.exit(1) |
| 52 | 52 |
| 53 | 53 |
| 54 def QuoteCommand(command): |
| 55 """Quotes command on Windows so it runs fine even with & and | in the string. |
| 56 """ |
| 57 if sys.platform == 'win32': |
| 58 def fix(arg): |
| 59 if ('&' in arg or '|' in arg) and '"' not in arg: |
| 60 arg = '"%s"' % arg |
| 61 return arg |
| 62 command = [fix(arg) for arg in command] |
| 63 return command |
| 64 |
| 65 |
| 54 def RunCommand(args, error_ok=False, error_message=None, **kwargs): | 66 def RunCommand(args, error_ok=False, error_message=None, **kwargs): |
| 55 try: | 67 try: |
| 56 return subprocess2.check_output(args, shell=False, **kwargs) | 68 return subprocess2.check_output(QuoteCommand(args), **kwargs) |
| 57 except subprocess2.CalledProcessError, e: | 69 except subprocess2.CalledProcessError, e: |
| 58 if not error_ok: | 70 if not error_ok: |
| 59 DieWithError( | 71 DieWithError( |
| 60 'Command "%s" failed.\n%s' % ( | 72 'Command "%s" failed.\n%s' % ( |
| 61 ' '.join(args), error_message or e.stdout or '')) | 73 ' '.join(args), error_message or e.stdout or '')) |
| 62 return e.stdout | 74 return e.stdout |
| 63 | 75 |
| 64 | 76 |
| 65 def RunGit(args, **kwargs): | 77 def RunGit(args, **kwargs): |
| 66 """Returns stdout.""" | 78 """Returns stdout.""" |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 (upstream_branch, self.GetBranch())) | 538 (upstream_branch, self.GetBranch())) |
| 527 | 539 |
| 528 issue = ConvertToInteger(self.GetIssue()) | 540 issue = ConvertToInteger(self.GetIssue()) |
| 529 patchset = ConvertToInteger(self.GetPatchset()) | 541 patchset = ConvertToInteger(self.GetPatchset()) |
| 530 if issue: | 542 if issue: |
| 531 description = self.GetDescription() | 543 description = self.GetDescription() |
| 532 else: | 544 else: |
| 533 # If the change was never uploaded, use the log messages of all commits | 545 # If the change was never uploaded, use the log messages of all commits |
| 534 # up to the branch point, as git cl upload will prefill the description | 546 # up to the branch point, as git cl upload will prefill the description |
| 535 # with these log messages. | 547 # with these log messages. |
| 536 description = RunCommand(['git', 'log', '--pretty=format:%s%n%n%b', | 548 description = CreateDescriptionFromLog([upstream_branch + '..']) |
| 537 '%s...' % (upstream_branch)]).strip() | |
| 538 | 549 |
| 539 if not author: | 550 if not author: |
| 540 author = RunGit(['config', 'user.email']).strip() or None | 551 author = RunGit(['config', 'user.email']).strip() or None |
| 541 return presubmit_support.GitChange( | 552 return presubmit_support.GitChange( |
| 542 name, | 553 name, |
| 543 description, | 554 description, |
| 544 absroot, | 555 absroot, |
| 545 files, | 556 files, |
| 546 issue, | 557 issue, |
| 547 patchset, | 558 patchset, |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 """Pulls out the commit log to use as a base for the CL description.""" | 883 """Pulls out the commit log to use as a base for the CL description.""" |
| 873 log_args = [] | 884 log_args = [] |
| 874 if len(args) == 1 and not args[0].endswith('.'): | 885 if len(args) == 1 and not args[0].endswith('.'): |
| 875 log_args = [args[0] + '..'] | 886 log_args = [args[0] + '..'] |
| 876 elif len(args) == 1 and args[0].endswith('...'): | 887 elif len(args) == 1 and args[0].endswith('...'): |
| 877 log_args = [args[0][:-1]] | 888 log_args = [args[0][:-1]] |
| 878 elif len(args) == 2: | 889 elif len(args) == 2: |
| 879 log_args = [args[0] + '..' + args[1]] | 890 log_args = [args[0] + '..' + args[1]] |
| 880 else: | 891 else: |
| 881 log_args = args[:] # Hope for the best! | 892 log_args = args[:] # Hope for the best! |
| 882 return RunGit(['log', '--pretty=format:%s\n\n%b'] + log_args) | 893 return RunGit(['log', '--pretty=format:%s%n%n%b'] + log_args) |
| 883 | 894 |
| 884 | 895 |
| 885 def ConvertToInteger(inputval): | 896 def ConvertToInteger(inputval): |
| 886 """Convert a string to integer, but returns either an int or None.""" | 897 """Convert a string to integer, but returns either an int or None.""" |
| 887 try: | 898 try: |
| 888 return int(inputval) | 899 return int(inputval) |
| 889 except (TypeError, ValueError): | 900 except (TypeError, ValueError): |
| 890 return None | 901 return None |
| 891 | 902 |
| 892 | 903 |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1551 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) | 1562 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) |
| 1552 | 1563 |
| 1553 # Not a known command. Default to help. | 1564 # Not a known command. Default to help. |
| 1554 GenUsage(parser, 'help') | 1565 GenUsage(parser, 'help') |
| 1555 return CMDhelp(parser, argv) | 1566 return CMDhelp(parser, argv) |
| 1556 | 1567 |
| 1557 | 1568 |
| 1558 if __name__ == '__main__': | 1569 if __name__ == '__main__': |
| 1559 fix_encoding.fix_encoding() | 1570 fix_encoding.fix_encoding() |
| 1560 sys.exit(main(sys.argv[1:])) | 1571 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |