| 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 and Gerrit.""" | 8 """A git-command for integrating reviews on Rietveld and Gerrit.""" |
| 9 | 9 |
| 10 from __future__ import print_function | 10 from __future__ import print_function |
| (...skipping 4652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4663 group.add_option( | 4663 group.add_option( |
| 4664 '-p', '--property', dest='properties', action='append', default=[], | 4664 '-p', '--property', dest='properties', action='append', default=[], |
| 4665 help='Specify generic properties in the form -p key1=value1 -p ' | 4665 help='Specify generic properties in the form -p key1=value1 -p ' |
| 4666 'key2=value2 etc. The value will be treated as ' | 4666 'key2=value2 etc. The value will be treated as ' |
| 4667 'json if decodable, or as string otherwise. ' | 4667 'json if decodable, or as string otherwise. ' |
| 4668 'NOTE: using this may make your try job not usable for CQ, ' | 4668 'NOTE: using this may make your try job not usable for CQ, ' |
| 4669 'which will then schedule another try job with default properties') | 4669 'which will then schedule another try job with default properties') |
| 4670 # TODO(tandrii): if this even used? | 4670 # TODO(tandrii): if this even used? |
| 4671 group.add_option( | 4671 group.add_option( |
| 4672 '-n', '--name', help='Try job name; default to current branch name') | 4672 '-n', '--name', help='Try job name; default to current branch name') |
| 4673 # TODO(tandrii): get rid of this. | |
| 4674 group.add_option( | |
| 4675 '--use-rietveld', action='store_true', default=False, | |
| 4676 help='DEPRECATED, NOT SUPPORTED.') | |
| 4677 group.add_option( | 4673 group.add_option( |
| 4678 '--buildbucket-host', default='cr-buildbucket.appspot.com', | 4674 '--buildbucket-host', default='cr-buildbucket.appspot.com', |
| 4679 help='Host of buildbucket. The default host is %default.') | 4675 help='Host of buildbucket. The default host is %default.') |
| 4680 parser.add_option_group(group) | 4676 parser.add_option_group(group) |
| 4681 auth.add_auth_options(parser) | 4677 auth.add_auth_options(parser) |
| 4682 options, args = parser.parse_args(args) | 4678 options, args = parser.parse_args(args) |
| 4683 auth_config = auth.extract_auth_config_from_options(options) | 4679 auth_config = auth.extract_auth_config_from_options(options) |
| 4684 | 4680 |
| 4685 if options.use_rietveld: | |
| 4686 parser.error('--use-rietveld is not longer supported.') | |
| 4687 | |
| 4688 # Make sure that all properties are prop=value pairs. | 4681 # Make sure that all properties are prop=value pairs. |
| 4689 bad_params = [x for x in options.properties if '=' not in x] | 4682 bad_params = [x for x in options.properties if '=' not in x] |
| 4690 if bad_params: | 4683 if bad_params: |
| 4691 parser.error('Got properties with missing "=": %s' % bad_params) | 4684 parser.error('Got properties with missing "=": %s' % bad_params) |
| 4692 | 4685 |
| 4693 if args: | 4686 if args: |
| 4694 parser.error('Unknown arguments: %s' % args) | 4687 parser.error('Unknown arguments: %s' % args) |
| 4695 | 4688 |
| 4696 cl = Changelist(auth_config=auth_config) | 4689 cl = Changelist(auth_config=auth_config) |
| 4697 if not cl.GetIssue(): | 4690 if not cl.GetIssue(): |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4805 ' Instead send your job to the parent.\n' | 4798 ' Instead send your job to the parent.\n' |
| 4806 'Bot list: %s' % builders, file=sys.stderr) | 4799 'Bot list: %s' % builders, file=sys.stderr) |
| 4807 return 1 | 4800 return 1 |
| 4808 | 4801 |
| 4809 patchset = cl.GetMostRecentPatchset() | 4802 patchset = cl.GetMostRecentPatchset() |
| 4810 if patchset and patchset != cl.GetPatchset(): | 4803 if patchset and patchset != cl.GetPatchset(): |
| 4811 print( | 4804 print( |
| 4812 '\nWARNING Mismatch between local config and server. Did a previous ' | 4805 '\nWARNING Mismatch between local config and server. Did a previous ' |
| 4813 'upload fail?\ngit-cl try always uses latest patchset from rietveld. ' | 4806 'upload fail?\ngit-cl try always uses latest patchset from rietveld. ' |
| 4814 'Continuing using\npatchset %s.\n' % patchset) | 4807 'Continuing using\npatchset %s.\n' % patchset) |
| 4815 if not options.use_rietveld: | 4808 try: |
| 4816 try: | 4809 trigger_try_jobs(auth_config, cl, options, masters, 'git_cl_try') |
| 4817 trigger_try_jobs(auth_config, cl, options, masters, 'git_cl_try') | 4810 except BuildbucketResponseException as ex: |
| 4818 except BuildbucketResponseException as ex: | 4811 print('ERROR: %s' % ex) |
| 4819 print('ERROR: %s' % ex) | 4812 return 1 |
| 4820 return 1 | 4813 except Exception as e: |
| 4821 except Exception as e: | 4814 stacktrace = (''.join(traceback.format_stack()) + traceback.format_exc()) |
| 4822 stacktrace = (''.join(traceback.format_stack()) + traceback.format_exc()) | 4815 print('ERROR: Exception when trying to trigger try jobs: %s\n%s' % |
| 4823 print('ERROR: Exception when trying to trigger try jobs: %s\n%s' % | 4816 (e, stacktrace)) |
| 4824 (e, stacktrace)) | 4817 return 1 |
| 4825 return 1 | |
| 4826 else: | |
| 4827 try: | |
| 4828 cl.RpcServer().trigger_distributed_try_jobs( | |
| 4829 cl.GetIssue(), patchset, options.name, options.clobber, | |
| 4830 options.revision, masters) | |
| 4831 except urllib2.HTTPError as e: | |
| 4832 if e.code == 404: | |
| 4833 print('404 from rietveld; ' | |
| 4834 'did you mean to use "git try" instead of "git cl try"?') | |
| 4835 return 1 | |
| 4836 print('Tried jobs on:') | |
| 4837 | |
| 4838 for (master, builders) in sorted(masters.iteritems()): | |
| 4839 if master: | |
| 4840 print('Master: %s' % master) | |
| 4841 length = max(len(builder) for builder in builders) | |
| 4842 for builder in sorted(builders): | |
| 4843 print(' %*s: %s' % (length, builder, ','.join(builders[builder]))) | |
| 4844 return 0 | 4818 return 0 |
| 4845 | 4819 |
| 4846 | 4820 |
| 4847 def CMDtry_results(parser, args): | 4821 def CMDtry_results(parser, args): |
| 4848 """Prints info about try jobs associated with current CL.""" | 4822 """Prints info about try jobs associated with current CL.""" |
| 4849 group = optparse.OptionGroup(parser, 'Try job results options') | 4823 group = optparse.OptionGroup(parser, 'Try job results options') |
| 4850 group.add_option( | 4824 group.add_option( |
| 4851 '-p', '--patchset', type=int, help='patchset number if not current.') | 4825 '-p', '--patchset', type=int, help='patchset number if not current.') |
| 4852 group.add_option( | 4826 group.add_option( |
| 4853 '--print-master', action='store_true', help='print master name as well.') | 4827 '--print-master', action='store_true', help='print master name as well.') |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5336 if __name__ == '__main__': | 5310 if __name__ == '__main__': |
| 5337 # These affect sys.stdout so do it outside of main() to simplify mocks in | 5311 # These affect sys.stdout so do it outside of main() to simplify mocks in |
| 5338 # unit testing. | 5312 # unit testing. |
| 5339 fix_encoding.fix_encoding() | 5313 fix_encoding.fix_encoding() |
| 5340 setup_color.init() | 5314 setup_color.init() |
| 5341 try: | 5315 try: |
| 5342 sys.exit(main(sys.argv[1:])) | 5316 sys.exit(main(sys.argv[1:])) |
| 5343 except KeyboardInterrupt: | 5317 except KeyboardInterrupt: |
| 5344 sys.stderr.write('interrupted\n') | 5318 sys.stderr.write('interrupted\n') |
| 5345 sys.exit(1) | 5319 sys.exit(1) |
| OLD | NEW |