Reland: Add ability to override DEPS file in recursedeps
This will allow ANGLE to have a recursible deps-file in their repo instead of
relying on chromium's DEPS file to specify an accurate dependency for itself.
Previously: https://chromiumcodereview.appspot.com/1919103003/
R=agable@chromium.org, dpranke@chromium.org, jmadill@chromium.org
BUG=
Review-Url: https://codereview.chromium.org/1948853002
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@300446 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient.py b/gclient.py
index 15a7530..f1428c5 100755
--- a/gclient.py
+++ b/gclient.py
@@ -371,6 +371,9 @@
# recursedeps is a mutable value that selectively overrides the default
# 'no recursion' setting on a dep-by-dep basis. It will replace
# recursion_override.
+ #
+ # It will be a dictionary of {deps_name: {"deps_file": depfile_name}} or
+ # None.
self.recursedeps = None
if not self.name and self.parent:
@@ -650,9 +653,14 @@
self.recursion_override = local_scope.get('recursion')
logging.warning(
'Setting %s recursion to %d.', self.name, self.recursion_limit)
- self.recursedeps = local_scope.get('recursedeps', None)
+ self.recursedeps = None
if 'recursedeps' in local_scope:
- self.recursedeps = set(self.recursedeps)
+ self.recursedeps = {}
+ for ent in local_scope['recursedeps']:
+ if isinstance(ent, basestring):
+ self.recursedeps[ent] = {"deps_file": self.deps_file}
+ else: # (depname, depsfilename)
+ self.recursedeps[ent[0]] = {"deps_file": ent[1]}
logging.warning('Found recursedeps %r.', repr(self.recursedeps))
# If present, save 'target_os' in the local_target_os property.
if 'target_os' in local_scope:
@@ -687,9 +695,9 @@
# Update recursedeps if it's set.
if self.recursedeps is not None:
logging.warning('Updating recursedeps by prepending %s.', self.name)
- rel_deps = set()
- for d in self.recursedeps:
- rel_deps.add(os.path.normpath(os.path.join(self.name, d)))
+ rel_deps = {}
+ for depname, options in self.recursedeps.iteritems():
+ rel_deps[os.path.normpath(os.path.join(self.name, depname))] = options
self.recursedeps = rel_deps
if 'allowed_hosts' in local_scope:
@@ -708,9 +716,14 @@
deps_to_add = []
for name, url in deps.iteritems():
should_process = self.recursion_limit and self.should_process
+ deps_file = self.deps_file
+ if self.recursedeps is not None:
+ ent = self.recursedeps.get(name)
+ if ent is not None:
+ deps_file = ent['deps_file']
deps_to_add.append(Dependency(
self, name, url, None, None, None, self.custom_vars, None,
- self.deps_file, should_process))
+ deps_file, should_process))
deps_to_add.sort(key=lambda x: x.name)
# override named sets of hooks by the custom hooks