| Index: presubmit_canned_checks.py | 
| diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py | 
| index bd3c361f2742f1145df08607e22f754f7b61b705..56031b2c9828dfdfa9b82329751320e4f884b4c5 100644 | 
| --- a/presubmit_canned_checks.py | 
| +++ b/presubmit_canned_checks.py | 
| @@ -562,6 +562,36 @@ def GetUnitTests(input_api, output_api, unit_tests, env=None): | 
| return results | 
|  | 
|  | 
| +def GetUnitTestsRecursively(input_api, output_api, directory, | 
| +                            whitelist, blacklist): | 
| +  """Gets all files in the directory tree (git repo) that match the whitelist. | 
| + | 
| +  Restricts itself to only find files within the Change's source repo, not | 
| +  dependencies. | 
| +  """ | 
| +  def check(filename): | 
| +    return (any(input_api.re.match(f, filename) for f in whitelist) and | 
| +            not any(input_api.re.match(f, filename) for f in blacklist)) | 
| + | 
| +  tests = [] | 
| + | 
| +  to_run = found = 0 | 
| +  for filepath in input_api.change.AllFiles(directory): | 
| +    found += 1 | 
| +    if check(filepath): | 
| +      to_run += 1 | 
| +      tests.append(filepath) | 
| +  input_api.logging.debug('Found %d files, running %d' % (found, to_run)) | 
| +  if not to_run: | 
| +    return [ | 
| +        output_api.PresubmitPromptWarning( | 
| +          'Out of %d files, found none that matched w=%r, b=%r in directory %s' | 
| +          % (found, whitelist, blacklist, directory)) | 
| +    ] | 
| + | 
| +  return GetUnitTests(input_api, output_api, tests) | 
| + | 
| + | 
| def GetPythonUnitTests(input_api, output_api, unit_tests): | 
| """Run the unit tests out of process, capture the output and use the result | 
| code to determine success. | 
| @@ -744,7 +774,7 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None, | 
| if True: | 
| return [GetPylintCmd(files)] | 
| else: | 
| -    return map(GetPylintCmd, files) | 
| +    return map(lambda x: GetPylintCmd([x]), files) | 
|  | 
|  | 
| def RunPylint(input_api, *args, **kwargs): | 
|  |