Commit 8b40a9b8 authored by maruel@chromium.org's avatar maruel@chromium.org

Fix ListRelevantPresubmitFiles().

It was affected by the current directory!

Review URL: http://codereview.chromium.org/119101

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@17554 0039d316-1c4b-4281-b951-d872f2087c98
parent 143993e9
......@@ -230,8 +230,9 @@ class InputApi(object):
dir_with_slash = normpath("%s/" % self.PresubmitLocalPath())
if len(dir_with_slash) == 1:
dir_with_slash = ''
return filter(lambda x: normpath(x.LocalPath()).startswith(dir_with_slash),
self.change.AffectedFiles(include_dirs, include_deletes))
return filter(
lambda x: normpath(x.AbsoluteLocalPath()).startswith(dir_with_slash),
self.change.AffectedFiles(include_dirs, include_deletes))
def LocalPaths(self, include_dirs=False):
"""Returns local paths of input_api.AffectedFiles()."""
......@@ -548,33 +549,29 @@ class GclChange(object):
self.AffectedFiles(include_deletes=False)))
def ListRelevantPresubmitFiles(files):
def ListRelevantPresubmitFiles(files, root):
"""Finds all presubmit files that apply to a given set of source files.
Args:
files: An iterable container containing file paths.
root: Path where to stop searching.
Return:
['foo/blat/PRESUBMIT.py', 'mat/gat/PRESUBMIT.py']
List of absolute paths of the existing PRESUBMIT.py scripts.
"""
checked_dirs = {} # Keys are directory paths, values are ignored.
source_dirs = [os.path.dirname(f) for f in files]
presubmit_files = []
for dir in source_dirs:
while (True):
if dir in checked_dirs:
break # We've already walked up from this directory.
test_path = os.path.join(dir, 'PRESUBMIT.py')
if os.path.isfile(test_path):
presubmit_files.append(normpath(test_path))
checked_dirs[dir] = ''
if dir in ['', '.']:
entries = []
for f in files:
f = normpath(os.path.join(root, f))
while f:
f = os.path.dirname(f)
if f in entries:
break
else:
dir = os.path.dirname(dir)
return presubmit_files
entries.append(f)
if f == root:
break
entries.sort()
entries = map(lambda x: os.path.join(x, 'PRESUBMIT.py'), entries)
return filter(lambda x: os.path.isfile(x), entries)
class PresubmitExecuter(object):
......@@ -653,7 +650,9 @@ def DoPresubmitChecks(change_info,
Return:
True if execution can continue, False if not.
"""
presubmit_files = ListRelevantPresubmitFiles(change_info.FileList())
checkout_root = gcl.GetRepositoryRoot()
presubmit_files = ListRelevantPresubmitFiles(change_info.FileList(),
checkout_root)
if not presubmit_files and verbose:
output_stream.write("Warning, no presubmit.py found.\n")
results = []
......@@ -661,7 +660,8 @@ def DoPresubmitChecks(change_info,
if default_presubmit:
if verbose:
output_stream.write("Running default presubmit script.\n")
results += executer.ExecPresubmitScript(default_presubmit, 'PRESUBMIT.py')
fake_path = os.path.join(checkout_root, 'PRESUBMIT.py')
results += executer.ExecPresubmitScript(default_presubmit, fake_path)
for filename in presubmit_files:
filename = os.path.abspath(filename)
if verbose:
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment