Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: presubmit_support.py

Issue 74163002: Allow PRESUBMIT.py files to have old and new-style trybot specifications (as long as each file is c… (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Address maruel nits. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/presubmit_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: presubmit_support.py
diff --git a/presubmit_support.py b/presubmit_support.py
index cd66e460ebbc4c9000d35072e376e118ee9fd25e..fa8cb129e234fac6b1af0f1f7e1ed80828fd0d50 100755
--- a/presubmit_support.py
+++ b/presubmit_support.py
@@ -1055,6 +1055,22 @@ class GetTrySlavesExecuter(object):
'Do not use \',\' separated builder or test names: %s' % botname)
else:
result = []
+
+ def valid_oldstyle(result):
+ return all(isinstance(i, basestring) for i in result)
+
+ def valid_newstyle(result):
+ return (all(isinstance(i, tuple) for i in result) and
+ all(len(i) == 2 for i in result) and
+ all(isinstance(i[0], basestring) for i in result) and
+ all(isinstance(i[1], set) for i in result)
+ )
+
+ # Ensure it's either all old-style or all new-style.
+ if not valid_oldstyle(result) and not valid_newstyle(result):
+ raise PresubmitFailure(
+ 'PRESUBMIT.py returned invalid trybot specification!')
+
return result
@@ -1083,35 +1099,35 @@ def DoGetTrySlaves(change,
output_stream.write("Warning, no presubmit.py found.\n")
results = []
executer = GetTrySlavesExecuter()
+
if default_presubmit:
if verbose:
output_stream.write("Running default presubmit script.\n")
fake_path = os.path.join(repository_root, 'PRESUBMIT.py')
- results += executer.ExecPresubmitScript(
- default_presubmit, fake_path, project, change)
+ results.extend(executer.ExecPresubmitScript(
+ default_presubmit, fake_path, project, change))
for filename in presubmit_files:
filename = os.path.abspath(filename)
if verbose:
output_stream.write("Running %s\n" % filename)
# Accept CRLF presubmit script.
presubmit_script = gclient_utils.FileRead(filename, 'rU')
- results += executer.ExecPresubmitScript(
- presubmit_script, filename, project, change)
+ results.extend(executer.ExecPresubmitScript(
+ presubmit_script, filename, project, change))
- 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!')
+
+ slave_dict = {}
+ old_style = filter(lambda x: isinstance(x, basestring), results)
+ new_style = filter(lambda x: isinstance(x, tuple), results)
+
+ for result in new_style:
+ slave_dict.setdefault(result[0], set()).update(result[1])
+ slaves = list(slave_dict.items())
+
+ slaves.extend(set(old_style))
if slaves and verbose:
- output_stream.write(', '.join(slaves))
+ output_stream.write(', '.join((str(x) for x in slaves)))
output_stream.write('\n')
return slaves
« no previous file with comments | « no previous file | tests/presubmit_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698