| Index: presubmit_support.py
|
| diff --git a/presubmit_support.py b/presubmit_support.py
|
| index 8f3575cefca5f2f17706a9cb790141ba35f28b8d..345c78eb6b8ec7caa676e7d6c0d624e737eafa70 100755
|
| --- a/presubmit_support.py
|
| +++ b/presubmit_support.py
|
| @@ -6,7 +6,7 @@
|
| """Enables directory-specific presubmit checks to run at upload and/or commit.
|
| """
|
|
|
| -__version__ = '1.6.2'
|
| +__version__ = '1.7.0'
|
|
|
| # TODO(joi) Add caching where appropriate/needed. The API is designed to allow
|
| # caching (between all different invocations of presubmit scripts for a given
|
| @@ -1031,14 +1031,22 @@ class GetTrySlavesExecuter(object):
|
| 'Presubmit functions must return a list, got a %s instead: %s' %
|
| (type(result), str(result)))
|
| for item in result:
|
| - if not isinstance(item, basestring):
|
| - raise PresubmitFailure('All try slaves names must be strings.')
|
| - if item != item.strip():
|
| + if isinstance(item, basestring):
|
| + # Old-style ['bot'] format.
|
| + botname = item
|
| + elif isinstance(item, tuple):
|
| + # New-style [('bot', set(['tests']))] format.
|
| + botname = item[0]
|
| + else:
|
| + raise PresubmitFailure('PRESUBMIT.py returned invalid tryslave/test'
|
| + ' format.')
|
| +
|
| + if botname != botname.strip():
|
| raise PresubmitFailure(
|
| 'Try slave names cannot start/end with whitespace')
|
| - if ',' in item:
|
| + if ',' in botname:
|
| raise PresubmitFailure(
|
| - 'Do not use \',\' separated builder or test names: %s' % item)
|
| + 'Do not use \',\' separated builder or test names: %s' % botname)
|
| else:
|
| result = []
|
| return result
|
| @@ -1084,7 +1092,18 @@ def DoGetTrySlaves(change,
|
| results += executer.ExecPresubmitScript(
|
| presubmit_script, filename, project, change)
|
|
|
| - slaves = list(set(results))
|
| + if all(isinstance(i, tuple) for i in results):
|
| + # New-style [('bot', set(['tests']))] format.
|
| + slave_dict = {}
|
| + for result in results:
|
| + slave_dict.setdefault(result[0], set()).update(result[1])
|
| + slaves = list(slave_dict.iteritems())
|
| + elif all(isinstance(i, basestring) for i in results):
|
| + # Old-style ['bot'] format.
|
| + slaves = list(set(results))
|
| + else:
|
| + raise ValueError('PRESUBMIT.py returned invalid trybot specification!')
|
| +
|
| if slaves and verbose:
|
| output_stream.write(', '.join(slaves))
|
| output_stream.write('\n')
|
|
|