Index: gclient.py |
diff --git a/gclient.py b/gclient.py |
index 8dc0f00f4f46a5a149475a73bebb6244775813d7..c3e696423783fb632eae6a6ba9564e302e495ff3 100644 |
--- a/gclient.py |
+++ b/gclient.py |
@@ -153,7 +153,7 @@ class Dependency(GClientKeywords): |
self.deps_file = deps_file or self.DEPS_FILE |
# A cache of the files affected by the current operation, necessary for |
# hooks. |
- self.file_list = [] |
+ self._file_list = [] |
# If it is not set to True, the dependency wasn't processed for its child |
# dependency, i.e. its DEPS wasn't read. |
self.deps_parsed = False |
@@ -304,7 +304,7 @@ class Dependency(GClientKeywords): |
command, args, pm): |
"""Runs 'command' before parsing the DEPS in case it's a initial checkout |
or a revert.""" |
- assert self.file_list == [] |
+ assert self._file_list == [] |
# When running runhooks, there's no need to consult the SCM. |
# All known hooks are expected to run unconditionally regardless of working |
# copy state, so skip the SCM status check. |
@@ -320,13 +320,13 @@ class Dependency(GClientKeywords): |
self.name) |
scm.RunCommand('updatesingle', options, |
args + [self.parsed_url.GetFilename()], |
- self.file_list) |
+ self._file_list) |
else: |
options.revision = revision_overrides.get(self.name) |
scm = gclient_scm.CreateSCM(self.parsed_url, self.root_dir(), self.name) |
- scm.RunCommand(command, options, args, self.file_list) |
- self.file_list = [os.path.join(self.name, f.strip()) |
- for f in self.file_list] |
+ scm.RunCommand(command, options, args, self._file_list) |
+ self._file_list = [os.path.join(self.name, f.strip()) |
+ for f in self._file_list] |
options.revision = None |
if pm: |
# The + 1 comes from the fact that .gclient is considered a step in |
@@ -365,25 +365,26 @@ class Dependency(GClientKeywords): |
else: |
# TODO(phajdan.jr): We should know exactly when the paths are absolute. |
# Convert all absolute paths to relative. |
- for i in range(len(self.file_list)): |
+ file_list = self.file_list() |
+ for i in range(len(file_list)): |
# It depends on the command being executed (like runhooks vs sync). |
- if not os.path.isabs(self.file_list[i]): |
+ if not os.path.isabs(file_list[i]): |
continue |
prefix = os.path.commonprefix([self.root_dir().lower(), |
- self.file_list[i].lower()]) |
- self.file_list[i] = self.file_list[i][len(prefix):] |
+ file_list[i].lower()]) |
+ file_list[i] = file_list[i][len(prefix):] |
# Strip any leading path separators. |
- while (self.file_list[i].startswith('\\') or |
- self.file_list[i].startswith('/')): |
- self.file_list[i] = self.file_list[i][1:] |
+ while (file_list[i].startswith('\\') or |
+ file_list[i].startswith('/')): |
+ file_list[i] = file_list[i][1:] |
# Run hooks on the basis of whether the files from the gclient operation |
# match each hook's pattern. |
for hook_dict in self.deps_hooks: |
pattern = re.compile(hook_dict['pattern']) |
- matching_file_list = [f for f in self.file_list if pattern.search(f)] |
+ matching_file_list = [f for f in file_list if pattern.search(f)] |
if matching_file_list: |
self._RunHookAction(hook_dict, matching_file_list) |
if self.recursion_limit(): |
@@ -439,10 +440,16 @@ class Dependency(GClientKeywords): |
# None is a valid return value to disable a dependency. |
return self.custom_deps.get(name, url) |
+ def file_list(self): |
+ result = self._file_list[:] |
+ for d in self.dependencies: |
+ result.extend(d.file_list()) |
+ return result |
+ |
def __str__(self): |
out = [] |
for i in ('name', 'url', 'safesync_url', 'custom_deps', 'custom_vars', |
- 'deps_hooks', 'file_list'): |
+ 'deps_hooks', '_file_list'): |
# 'deps_file' |
if self.__dict__[i]: |
out.append('%s: %s' % (i, self.__dict__[i])) |