Index: gclient.py |
diff --git a/gclient.py b/gclient.py |
index 55305bd8c4b2493766dfa995b9ad735a50613da0..30d26ba7d04ea45d2570b78f9a2a77a00542f045 100644 |
--- a/gclient.py |
+++ b/gclient.py |
@@ -311,8 +311,7 @@ class Dependency(GClientKeywords): |
return deps |
def _RunHookAction(self, hook_dict, matching_file_list): |
- """Runs the action from a single hook. |
- """ |
+ """Runs the action from a single hook.""" |
logging.info(hook_dict) |
logging.info(matching_file_list) |
command = hook_dict['action'][:] |
@@ -329,7 +328,7 @@ class Dependency(GClientKeywords): |
# Use a discrete exit status code of 2 to indicate that a hook action |
# failed. Users of this script may wish to treat hook action failures |
# differently from VC failures. |
- gclient_utils.SubprocessCall(command, self.root_dir(), fail_status=2) |
+ return gclient_utils.SubprocessCall(command, self.root_dir(), fail_status=2) |
def _RunHooks(self, command, file_list, is_using_git): |
"""Evaluates all hooks, running actions as needed. |
@@ -370,9 +369,39 @@ class Dependency(GClientKeywords): |
def enforced_os(self): |
return self.parent.enforced_os() |
+ def recursion_limit(self): |
+ return self.parent.recursion_limit() - 1 |
+ |
+ def tree(self, force_all): |
+ return self.parent.tree(force_all) |
+ |
+ def get_custom_deps(self, name, url): |
+ """Returns a custom deps if applicable.""" |
+ if self.parent: |
+ url = self.parent.get_custom_deps(name, url) |
+ # None is a valid return value to disable a dependency. |
+ return self.custom_deps.get(name, url) |
+ |
+ def __str__(self): |
+ out = [] |
+ for i in ('name', 'url', 'safesync_url', 'custom_deps', 'custom_vars', |
+ 'deps_hooks'): |
+ # 'deps_file' |
+ if self.__dict__[i]: |
+ out.append('%s: %s' % (i, self.__dict__[i])) |
+ |
+ for d in self.dependencies: |
+ out.extend([' ' + x for x in str(d).splitlines()]) |
+ out.append('') |
+ return '\n'.join(out) |
+ |
+ def __repr__(self): |
+ return '%s: %s' % (self.name, self.url) |
+ |
class GClient(Dependency): |
- """Main gclient checkout root where .gclient resides.""" |
+ """Object that represent a gclient checkout. A tree of Dependency(), one per |
+ solution or DEPS entry.""" |
SUPPORTED_COMMANDS = [ |
'cleanup', 'diff', 'export', 'pack', 'revert', 'status', 'update', |
'runhooks' |
@@ -429,6 +458,9 @@ solutions = [ |
self._enforced_os = list(set(enforced_os)) |
self._root_dir = root_dir |
self.config_content = None |
+ # Do not change previous behavior. Only solution level and immediate DEPS |
+ # are processed. |
+ self._recursion_limit = 2 |
def SetConfig(self, content): |
assert self.dependencies == [] |
@@ -670,13 +702,13 @@ solutions = [ |
if not self._options.delete_unversioned_trees or modified_files: |
# There are modified files in this entry. Keep warning until |
# removed. |
- print(("\nWARNING: \"%s\" is no longer part of this client. " |
- "It is recommended that you manually remove it.\n") % |
+ print(('\nWARNING: \'%s\' is no longer part of this client. ' |
+ 'It is recommended that you manually remove it.\n') % |
entry_fixed) |
else: |
# Delete the entry |
- print("\n________ deleting \'%s\' " + |
- "in \'%s\'") % (entry_fixed, self.root_dir()) |
+ print('\n________ deleting \'%s\' ' + |
+ 'in \'%s\'') % (entry_fixed, self.root_dir()) |
gclient_utils.RemoveDirectory(e_dir) |
# record the current list of entries for next time |
self._SaveEntries(entries) |
@@ -766,12 +798,36 @@ solutions = [ |
snapclient.SetConfig(config) |
print(snapclient.config_content) |
+ def ParseDepsFile(self, direct_reference): |
+ """No DEPS to parse for a .gclient file.""" |
+ self.direct_reference = direct_reference |
+ self.deps_parsed = True |
+ |
def root_dir(self): |
+ """Root directory of gclient checkout.""" |
return self._root_dir |
def enforced_os(self): |
+ """What deps_os entries that are to be parsed.""" |
return self._enforced_os |
+ def recursion_limit(self): |
+ """How recursive can each dependencies in DEPS file can load DEPS file.""" |
+ return self._recursion_limit |
+ |
+ def tree(self, force_all): |
+ """Returns a flat list of all the dependencies.""" |
+ def subtree(dep): |
+ if not force_all and not dep.direct_reference: |
+ # Was loaded from a From() keyword in a DEPS file, don't load all its |
+ # dependencies. |
+ return [] |
+ result = dep.dependencies[:] |
+ for d in dep.dependencies: |
+ result.extend(subtree(d)) |
+ return result |
+ return subtree(self) |
+ |
#### gclient commands. |