Commit c38fd01b authored by iannucci@chromium.org's avatar iannucci@chromium.org

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.

R=agable@chromium.org, jmadill@chromium.org
BUG=

Review-Url: https://codereview.chromium.org/1919103003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@300293 0039d316-1c4b-4281-b951-d872f2087c98
parent da3bfae5
......@@ -371,6 +371,9 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
# 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 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
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": "DEPS"}
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 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
# 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 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
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
......
......@@ -847,6 +847,42 @@ class GclientTest(trial_dir.TestCase):
],
self._get_processed())
def testRecursedepsAltfile(self):
"""Verifies gclient respects the |recursedeps| var syntax with overridden
target DEPS file.
This is what we mean to check here:
- Naming an alternate DEPS file in recursedeps pulls from that one.
"""
write(
'.gclient',
'solutions = [\n'
' { "name": "foo", "url": "svn://example.com/foo" },\n'
']')
write(
os.path.join('foo', 'DEPS'),
'deps = {\n'
' "bar": "/bar",\n'
'}\n'
'recursedeps = [("bar", "DEPS.alt")]')
write(os.path.join('bar', 'DEPS'), 'ERROR ERROR ERROR')
write(
os.path.join('bar', 'DEPS.alt'),
'deps = {\n'
' "baz": "/baz",\n'
'}')
options, _ = gclient.OptionParser().parse_args([])
obj = gclient.GClient.LoadCurrentConfig(options)
obj.RunOnDeps('None', [])
self.assertEquals(
[
'svn://example.com/foo',
'svn://example.com/foo/bar',
'svn://example.com/foo/bar/baz',
],
self._get_processed())
def testGitDeps(self):
"""Verifies gclient respects a .DEPS.git deps file.
......
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