Chromium Code Reviews| Index: git_cl.py |
| diff --git a/git_cl.py b/git_cl.py |
| index 1d3d24cb85ad129204e8e6af9decfd2203868114..8c077b6aaa6593d3b1e7c239633b2c2469fbef9d 100755 |
| --- a/git_cl.py |
| +++ b/git_cl.py |
| @@ -2117,50 +2117,72 @@ def CMDtry(parser, args): |
| if not options.name: |
| options.name = cl.GetBranch() |
| - # Process --bot and --testfilter. |
| - if not options.bot: |
| - # Get try slaves from PRESUBMIT.py files if not specified. |
| - change = cl.GetChange(cl.GetCommonAncestorWithUpstream(), None) |
| - options.bot = presubmit_support.DoGetTrySlaves( |
| - change, |
| - change.LocalPaths(), |
| - settings.GetRoot(), |
| - None, |
| - None, |
| - options.verbose, |
| - sys.stdout) |
| - if not options.bot: |
| - parser.error('No default try builder to try, use --bot') |
| - |
| - builders_and_tests = {} |
| - old_style = filter(lambda x: isinstance(x, basestring), options.bot) |
| - new_style = filter(lambda x: isinstance(x, tuple), options.bot) |
| - |
| - for bot in old_style: |
| - if ':' in bot: |
| - builder, tests = bot.split(':', 1) |
| - builders_and_tests.setdefault(builder, []).extend(tests.split(',')) |
| - elif ',' in bot: |
| - parser.error('Specify one bot per --bot flag') |
| - else: |
| - builders_and_tests.setdefault(bot, []).append('defaulttests') |
| + def GetMasterMap(): |
| + # Process --bot and --testfilter. |
| + if not options.bot: |
| + change = cl.GetChange(cl.GetCommonAncestorWithUpstream(), None) |
| + |
| + # Get try masters from PRESUBMIT.py files. |
| + masters = presubmit_support.DoGetTryMasters( |
| + change, |
| + change.LocalPaths(), |
| + settings.GetRoot(), |
| + None, |
| + None, |
| + options.verbose, |
| + sys.stdout) |
| + if masters: |
| + return masters |
| + |
| + # Fall back to deprecated method: get try slaves from PRESUBMIT.py files. |
| + options.bot = presubmit_support.DoGetTrySlaves( |
| + change, |
| + change.LocalPaths(), |
| + settings.GetRoot(), |
| + None, |
| + None, |
| + options.verbose, |
| + sys.stdout) |
| + if not options.bot: |
| + parser.error('No default try builder to try, use --bot') |
| + |
| + builders_and_tests = {} |
| + # TODO(machenbach): The old style command-line options don't support |
| + # multiple try masters yet. |
|
Paweł Hajdan Jr.
2014/02/27 02:20:24
Not only that, but it'll be required to provide so
Michael Achenbach
2014/02/27 18:35:23
I added a master option. But even better would be
|
| + old_style = filter(lambda x: isinstance(x, basestring), options.bot) |
| + new_style = filter(lambda x: isinstance(x, tuple), options.bot) |
| + |
| + for bot in old_style: |
| + if ':' in bot: |
| + builder, tests = bot.split(':', 1) |
| + builders_and_tests.setdefault(builder, []).extend(tests.split(',')) |
| + elif ',' in bot: |
| + parser.error('Specify one bot per --bot flag') |
| + else: |
| + builders_and_tests.setdefault(bot, []).append('defaulttests') |
| + |
| + for bot, tests in new_style: |
| + builders_and_tests.setdefault(bot, []).extend(tests) |
| - for bot, tests in new_style: |
| - builders_and_tests.setdefault(bot, []).extend(tests) |
| + # Return a master map with an empty master to be backwards compatible. |
| + return {'': builders_and_tests} |
| + |
| + masters = GetMasterMap() |
| if options.testfilter: |
| forced_tests = sum((t.split(',') for t in options.testfilter), []) |
| - builders_and_tests = dict( |
| - (b, forced_tests) for b, t in builders_and_tests.iteritems() |
| - if t != ['compile']) |
| + masters = dict((master, dict( |
| + (b, forced_tests) for b, t in slaves.iteritems() |
| + if t != ['compile'])) for master, slaves in masters.iteritems()) |
| - if any('triggered' in b for b in builders_and_tests): |
| - print >> sys.stderr, ( |
| - 'ERROR You are trying to send a job to a triggered bot. This type of' |
| - ' bot requires an\ninitial job from a parent (usually a builder). ' |
| - 'Instead send your job to the parent.\n' |
| - 'Bot list: %s' % builders_and_tests) |
| - return 1 |
| + for builders in masters.itervalues(): |
| + if any('triggered' in b for b in builders): |
| + print >> sys.stderr, ( |
| + 'ERROR You are trying to send a job to a triggered bot. This type of' |
| + ' bot requires an\ninitial job from a parent (usually a builder). ' |
| + 'Instead send your job to the parent.\n' |
| + 'Bot list: %s' % builders) |
| + return 1 |
| patchset = cl.GetMostRecentPatchset() |
| if patchset and patchset != cl.GetPatchset(): |
| @@ -2171,16 +2193,20 @@ def CMDtry(parser, args): |
| try: |
| cl.RpcServer().trigger_try_jobs( |
| cl.GetIssue(), patchset, options.name, options.clobber, |
| - options.revision, builders_and_tests) |
| + options.revision, masters) |
| except urllib2.HTTPError, e: |
| if e.code == 404: |
| print('404 from rietveld; ' |
| 'did you mean to use "git try" instead of "git cl try"?') |
| return 1 |
| print('Tried jobs on:') |
| - length = max(len(builder) for builder in builders_and_tests) |
| - for builder in sorted(builders_and_tests): |
| - print ' %*s: %s' % (length, builder, ','.join(builders_and_tests[builder])) |
| + |
| + for (master, builders) in masters.iteritems(): |
| + if master: |
| + print 'Master: %s' % master |
| + length = max(len(builder) for builder in builders) |
| + for builder in sorted(builders): |
| + print ' %*s: %s' % (length, builder, ','.join(builders[builder])) |
| return 0 |