OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # git-cl -- a git-command for integrating reviews on Rietveld | 2 # git-cl -- a git-command for integrating reviews on Rietveld |
3 # Copyright (C) 2008 Evan Martin <martine@danga.com> | 3 # Copyright (C) 2008 Evan Martin <martine@danga.com> |
4 | 4 |
5 import errno | 5 import errno |
6 import logging | 6 import logging |
7 import optparse | 7 import optparse |
8 import os | 8 import os |
9 import re | 9 import re |
10 import subprocess | 10 import subprocess |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 self.default_server = FixUrl(self._GetConfig( | 130 self.default_server = FixUrl(self._GetConfig( |
131 'rietveld.server', error_message=error_message)) | 131 'rietveld.server', error_message=error_message)) |
132 return self.default_server | 132 return self.default_server |
133 | 133 |
134 def GetCCList(self): | 134 def GetCCList(self): |
135 """Return the users cc'd on this CL. | 135 """Return the users cc'd on this CL. |
136 | 136 |
137 Return is a string suitable for passing to gcl with the --cc flag. | 137 Return is a string suitable for passing to gcl with the --cc flag. |
138 """ | 138 """ |
139 if self.cc is None: | 139 if self.cc is None: |
140 self.cc = self._GetConfig('rietveld.cc', error_ok=True) | 140 base_cc = self._GetConfig('rietveld.cc', error_ok=True) |
141 more_cc = self._GetConfig('rietveld.extracc', error_ok=True) | 141 more_cc = self._GetConfig('rietveld.extracc', error_ok=True) |
142 if more_cc is not None: | 142 self.cc = ','.join(filter(None, (base_cc, more_cc))) or '' |
143 self.cc += ',' + more_cc | |
144 return self.cc | 143 return self.cc |
145 | 144 |
146 def GetRoot(self): | 145 def GetRoot(self): |
147 if not self.root: | 146 if not self.root: |
148 self.root = os.path.abspath(RunGit(['rev-parse', '--show-cdup']).strip()) | 147 self.root = os.path.abspath(RunGit(['rev-parse', '--show-cdup']).strip()) |
149 return self.root | 148 return self.root |
150 | 149 |
151 def GetIsGitSvn(self): | 150 def GetIsGitSvn(self): |
152 """Return true if this repo looks like it's using git-svn.""" | 151 """Return true if this repo looks like it's using git-svn.""" |
153 if self.is_git_svn is None: | 152 if self.is_git_svn is None: |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 | 702 |
704 | 703 |
705 @usage('[args to "git diff"]') | 704 @usage('[args to "git diff"]') |
706 def CMDupload(parser, args): | 705 def CMDupload(parser, args): |
707 """upload the current changelist to codereview""" | 706 """upload the current changelist to codereview""" |
708 parser.add_option('--bypass-hooks', action='store_true', dest='bypass_hooks', | 707 parser.add_option('--bypass-hooks', action='store_true', dest='bypass_hooks', |
709 help='bypass upload presubmit hook') | 708 help='bypass upload presubmit hook') |
710 parser.add_option('-m', dest='message', help='message for patch') | 709 parser.add_option('-m', dest='message', help='message for patch') |
711 parser.add_option('-r', '--reviewers', | 710 parser.add_option('-r', '--reviewers', |
712 help='reviewer email addresses') | 711 help='reviewer email addresses') |
| 712 parser.add_option('--cc', |
| 713 help='cc email addresses') |
713 parser.add_option('--send-mail', action='store_true', | 714 parser.add_option('--send-mail', action='store_true', |
714 help='send email to reviewer immediately') | 715 help='send email to reviewer immediately') |
715 parser.add_option("--emulate_svn_auto_props", action="store_true", | 716 parser.add_option("--emulate_svn_auto_props", action="store_true", |
716 dest="emulate_svn_auto_props", | 717 dest="emulate_svn_auto_props", |
717 help="Emulate Subversion's auto properties feature.") | 718 help="Emulate Subversion's auto properties feature.") |
718 parser.add_option("--desc_from_logs", action="store_true", | 719 parser.add_option("--desc_from_logs", action="store_true", |
719 dest="from_logs", | 720 dest="from_logs", |
720 help="""Squashes git commit logs into change description and | 721 help="""Squashes git commit logs into change description and |
721 uses message as subject""") | 722 uses message as subject""") |
722 (options, args) = parser.parse_args(args) | 723 (options, args) = parser.parse_args(args) |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 log_desc += '\nTEST=' | 787 log_desc += '\nTEST=' |
787 change_desc = UserEditedLog(initial_text + log_desc) | 788 change_desc = UserEditedLog(initial_text + log_desc) |
788 subject = '' | 789 subject = '' |
789 if change_desc: | 790 if change_desc: |
790 subject = change_desc.splitlines()[0] | 791 subject = change_desc.splitlines()[0] |
791 if not change_desc: | 792 if not change_desc: |
792 print "Description is empty; aborting." | 793 print "Description is empty; aborting." |
793 return 1 | 794 return 1 |
794 upload_args.extend(['--message', subject]) | 795 upload_args.extend(['--message', subject]) |
795 upload_args.extend(['--description', change_desc]) | 796 upload_args.extend(['--description', change_desc]) |
796 upload_args.extend(['--cc', settings.GetCCList()]) | 797 cc = ','.join(filter(None, (settings.GetCCList(), options.cc))) |
| 798 if cc: |
| 799 upload_args.extend(['--cc', cc]) |
797 | 800 |
798 # Include the upstream repo's URL in the change -- this is useful for | 801 # Include the upstream repo's URL in the change -- this is useful for |
799 # projects that have their source spread across multiple repos. | 802 # projects that have their source spread across multiple repos. |
800 remote_url = None | 803 remote_url = None |
801 if settings.GetIsGitSvn(): | 804 if settings.GetIsGitSvn(): |
802 data = RunGit(['svn', 'info']) | 805 data = RunGit(['svn', 'info']) |
803 if data: | 806 if data: |
804 keys = dict(line.split(': ', 1) for line in data.splitlines() | 807 keys = dict(line.split(': ', 1) for line in data.splitlines() |
805 if ': ' in line) | 808 if ': ' in line) |
806 remote_url = keys.get('URL', None) | 809 remote_url = keys.get('URL', None) |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1269 ('AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' | 1272 ('AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' |
1270 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) | 1273 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) |
1271 | 1274 |
1272 # Not a known command. Default to help. | 1275 # Not a known command. Default to help. |
1273 GenUsage(parser, 'help') | 1276 GenUsage(parser, 'help') |
1274 return CMDhelp(parser, argv) | 1277 return CMDhelp(parser, argv) |
1275 | 1278 |
1276 | 1279 |
1277 if __name__ == '__main__': | 1280 if __name__ == '__main__': |
1278 sys.exit(main(sys.argv[1:])) | 1281 sys.exit(main(sys.argv[1:])) |
OLD | NEW |