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

Unified Diff: scripts/slave/recipe_modules/filter/api.py

Issue 427073003: Adds ability to filter the set of tests that are run by a bot (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: merge to trunk Created 6 years, 4 months 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 | « scripts/slave/recipe_modules/filter/__init__.py ('k') | scripts/slave/recipe_modules/filter/example.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: scripts/slave/recipe_modules/filter/api.py
diff --git a/scripts/slave/recipe_modules/filter/api.py b/scripts/slave/recipe_modules/filter/api.py
index e5dc141fcd3eaf7cbbc55d9de5626aabec9e935b..65c8c482334541f488179b0677712b59f1d6a928 100644
--- a/scripts/slave/recipe_modules/filter/api.py
+++ b/scripts/slave/recipe_modules/filter/api.py
@@ -10,6 +10,7 @@ class FilterApi(recipe_api.RecipeApi):
def __init__(self, **kwargs):
super(FilterApi, self).__init__(**kwargs)
self._result = False
+ self._matching_exes = []
def __is_path_in_exclusion_list(self, path, exclusions):
"""Returns true if |path| matches any of the regular expressions in
@@ -26,17 +27,26 @@ class FilterApi(recipe_api.RecipeApi):
does_patch_require_compile."""
return self._result
+ @property
+ def matching_exes(self):
+ """Returns the set of exes passed to does_patch_require_compile() that
+ are effected by the set of files that have changed."""
+ return self._matching_exes
- def does_patch_require_compile(self, exclusions=None, **kwargs):
- """Return true if the current patch requires a build (and tests to run).
+ def does_patch_require_compile(self, exclusions=None, exes=None, **kwargs):
+ """Return true if the current patch requires a build (and exes to run).
Return value can be accessed by call to result().
Args:
exclusions: list of python regular expressions (as strings). If any of
the files in the current patch match one of the values in |exclusions|
- True is returned."""
+ True is returned (by way of result()).
+ exes: the possible set of executables that are desired to run. When done
+ matching_exes() returns the set of exes that are effected by the files
+ that have changed."""
exclusions = exclusions or self.m.properties.get('filter_exclusions', [])
+ self._matching_exes = exes or self.m.properties.get('matching_exes', [])
# Get the set of files in the current patch.
step_result = self.m.git('diff', '--cached', '--name-only',
@@ -48,7 +58,9 @@ class FilterApi(recipe_api.RecipeApi):
# Check the path of each file against the exclusion list. If found, no need
# to check dependencies.
exclusion_regexs = [re.compile(exclusion) for exclusion in exclusions]
+ paths = []
for path in step_result.stdout.split():
+ paths.append(path)
first_match = self.__is_path_in_exclusion_list(path, exclusion_regexs)
if first_match:
step_result.presentation.logs.setdefault('excluded_files', []).append(
@@ -56,18 +68,27 @@ class FilterApi(recipe_api.RecipeApi):
self._result = 1
return
+ analyze_input = {'files': paths, 'targets': self._matching_exes}
+
+ test_output = {'status': 'No dependency', 'targets': []}
+
kwargs.setdefault('env', {})
kwargs['env'].update(self.m.chromium.c.gyp_env.as_jsonish())
step_result = self.m.python('analyze',
self.m.path['checkout'].join('build', 'gyp_chromium'),
- ['--analyzer',
- self.m.raw_io.input(step_result.stdout)],
- stdout = self.m.raw_io.output(),
- step_test_data=lambda:
- self.m.raw_io.test_api.stream_output('No dependency'),
+ args=['--analyzer2',
+ self.m.json.input(analyze_input),
+ self.m.json.output()],
+ step_test_data=lambda: self.m.json.test_api.output(
+ test_output),
**kwargs)
- if step_result.stdout.find('Found dependency') != -1:
+ if 'error' in step_result.json.output:
+ self._result = True
+ step_result.presentation.step_text = 'Error: ' + \
+ step_result.json.output['error']
+ elif step_result.json.output['status'] == 'Found dependency':
+ self._matching_exes = step_result.json.output['targets']
self._result = True
else:
step_result.presentation.step_text = 'No compile necessary'
« no previous file with comments | « scripts/slave/recipe_modules/filter/__init__.py ('k') | scripts/slave/recipe_modules/filter/example.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698