| 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 1178c9a9f70fb1cd64d99a14bd544ad06bb1a371..e81fc48be37c6ff5921795bb71bce776a068db51 100644
|
| --- a/scripts/slave/recipe_modules/filter/api.py
|
| +++ b/scripts/slave/recipe_modules/filter/api.py
|
| @@ -14,10 +14,10 @@ class FilterApi(recipe_api.RecipeApi):
|
| self._compile_targets = []
|
| self._paths = []
|
|
|
| - def __is_path_in_exclusion_list(self, path, exclusions):
|
| + def __is_path_in_regex_list(self, path, regexes):
|
| """Returns true if |path| matches any of the regular expressions in
|
| - |exclusions|."""
|
| - for regex in exclusions:
|
| + |regexes|."""
|
| + for regex in regexes:
|
| match = regex.match(path)
|
| if match and match.end() == len(path):
|
| return regex.pattern
|
| @@ -60,13 +60,6 @@ class FilterApi(recipe_api.RecipeApi):
|
| step_result.presentation.step_text = 'path: %r' % config_path
|
| return step_result.json.output
|
|
|
| - def _load_exclusions(self, names, file_name):
|
| - file_contents = self._load_analyze_config(file_name)
|
| - exclusions = []
|
| - for name in names:
|
| - exclusions.extend(file_contents[name]['exclusions'])
|
| - return exclusions
|
| -
|
| def does_patch_require_compile(self,
|
| affected_files,
|
| test_targets=None,
|
| @@ -120,7 +113,13 @@ class FilterApi(recipe_api.RecipeApi):
|
| names = ['base']
|
| if additional_names:
|
| names.extend(additional_names)
|
| - exclusions = self._load_exclusions(names, config_file_name)
|
| +
|
| + config_contents = self._load_analyze_config(config_file_name)
|
| + exclusions = []
|
| + ignores = []
|
| + for name in names:
|
| + exclusions.extend(config_contents[name].get('exclusions', []))
|
| + ignores.extend(config_contents[name].get('ignores', []))
|
|
|
| test_targets = test_targets or []
|
| additional_compile_targets = additional_compile_targets or []
|
| @@ -132,19 +131,28 @@ 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]
|
| + ignore_regexs = [re.compile(ignore) for ignore in ignores]
|
| + ignored = True
|
| for path in self.paths:
|
| - first_match = self.__is_path_in_exclusion_list(path, exclusion_regexs)
|
| + first_match = self.__is_path_in_regex_list(path, exclusion_regexs)
|
| if first_match:
|
| - step_result = self.m.python.inline(
|
| - 'analyze',
|
| - 'import sys; sys.exit(0)',
|
| - add_python_log=False)
|
| + # TODO(phajdan.jr): consider using plain api.step here, not python.
|
| + step_result = self.m.python.succeeding_step(
|
| + 'analyze', 'Analyze disabled: matched exclusion')
|
| step_result.presentation.logs.setdefault('excluded_files', []).append(
|
| '%s (regex = \'%s\')' % (path, first_match))
|
| self._compile_targets = sorted(all_targets)
|
| self._test_targets = sorted(test_targets)
|
| return
|
|
|
| + if not self.__is_path_in_regex_list(path, ignore_regexs):
|
| + ignored = False
|
| +
|
| + if ignored:
|
| + self.m.python.succeeding_step(
|
| + 'analyze', 'No compile necessary (all files ignored)')
|
| + return
|
| +
|
| analyze_input = {
|
| 'files': self.paths,
|
| 'test_targets': test_targets,
|
|
|