Index: git_cl.py |
diff --git a/git_cl.py b/git_cl.py |
index 6b0d304913564e07865e76fdb768534aa41c36df..1321d2f49d835cab504d282f4c9d557ce3dd9d38 100755 |
--- a/git_cl.py |
+++ b/git_cl.py |
@@ -341,14 +341,15 @@ def _buildbucket_retry(operation_name, http, *args, **kwargs): |
def _get_bucket_map(changelist, options, option_parser): |
- """Returns a dict mapping bucket names (or master names) to |
- builders and tests, for triggering try jobs. |
+ """Returns a dict mapping bucket names to builders and tests, |
+ for triggering try jobs. |
""" |
+ # If no bots are listed, we try to get a set of builders and tests based |
+ # on GetPreferredTryMasters functions in PRESUBMIT.py files. |
if not options.bot: |
change = changelist.GetChange( |
changelist.GetCommonAncestorWithUpstream(), None) |
- # Get try masters from PRESUBMIT.py files. |
masters = presubmit_support.DoGetTryMasters( |
change=change, |
changed_files=change.LocalPaths(), |
@@ -376,42 +377,22 @@ def _get_bucket_map(changelist, options, option_parser): |
if not options.bot: |
return {} |
+ # If a bucket or master is passed, then we assume all bots are under |
+ # that one master. |
if options.bucket: |
return {options.bucket: {b: [] for b in options.bot}} |
+ if options.master: |
+ return {_prefix_master(options.master): {b: [] for b in options.bot}} |
- if not options.master: |
- bucket_map, error_message = _get_bucket_map_for_builders(options.bot) |
- if error_message: |
- option_parser.error( |
- 'Tryserver master cannot be found because: %s\n' |
- 'Please manually specify the tryserver master, e.g. ' |
- '"-m tryserver.chromium.linux".' % error_message) |
- return bucket_map |
- |
- builders_and_tests = {} |
- |
- # TODO(machenbach): The old style command-line options don't support |
- # multiple try masters yet. |
- # TODO(qyearsley): If options.bot is always a list of strings, then |
- # "new_style" never applies, and so we should remove support for Specifying |
- # test filters completely. |
- 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: |
- option_parser.error('Specifying testfilter is no longer supported') |
- elif ',' in bot: |
- option_parser.error('Specify one bot per --bot flag') |
- else: |
- builders_and_tests.setdefault(bot, []) |
- |
- for bot, tests in new_style: |
- builders_and_tests.setdefault(bot, []).extend(tests) |
- |
- # Add the "master." prefix to the master name to obtain the bucket name. |
- bucket = _prefix_master(options.master) |
- return {bucket: builders_and_tests} |
+ # If bots are listed but no master or bucket, then we need to find out |
+ # the corresponding master for each bot. |
+ bucket_map, error_message = _get_bucket_map_for_builders(options.bot) |
+ if error_message: |
+ option_parser.error( |
+ 'Tryserver master cannot be found because: %s\n' |
+ 'Please manually specify the tryserver master, e.g. ' |
+ '"-m tryserver.chromium.linux".' % error_message) |
+ return bucket_map |
def _get_bucket_map_for_builders(builders): |
@@ -429,7 +410,6 @@ def _get_bucket_map_for_builders(builders): |
bucket_map = {} |
for builder in builders: |
- builder = builder.split(':', 1)[0] |
masters = builders_map.get(builder, []) |
if not masters: |
return None, ('No matching master for builder %s.' % builder) |
@@ -4870,8 +4850,9 @@ def CMDtry(parser, args): |
buckets = _get_bucket_map(cl, options, parser) |
+ # If no bots are listed and we couldn't get a list based on PRESUBMIT files, |
+ # then we default to triggering a CQ dry run (see http://crbug.com/625697). |
if not buckets: |
- # Default to triggering Dry Run (see http://crbug.com/625697). |
if options.verbose: |
print('git cl try with no bots now defaults to CQ Dry Run.') |
return cl.TriggerDryRun() |