Update recursedeps to support use_relative_path.

Also cast recursedeps to a set.  We'll continue
to support using a list literal form in DEPS for
now.

R=iannucci@chromium.org,agable@chromium.org
BUG=393000

Review URL: https://codereview.chromium.org/385123008

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@283474 0039d316-1c4b-4281-b951-d872f2087c98
changes/01/332501/1
cmp@chromium.org 11 years ago
parent 16f2e08179
commit f2def0abf8

@ -595,6 +595,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
'Setting %s recursion to %d.', self.name, self.recursion_limit)
self.recursedeps = local_scope.get('recursedeps', None)
if 'recursedeps' in local_scope:
self.recursedeps = set(self.recursedeps)
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:
@ -613,16 +614,27 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
# If use_relative_paths is set in the DEPS file, regenerate
# the dictionary using paths relative to the directory containing
# the DEPS file.
# the DEPS file. Also update recursedeps if use_relative_paths is
# enabled.
use_relative_paths = local_scope.get('use_relative_paths', False)
if use_relative_paths:
logging.warning('use_relative_paths enabled.')
rel_deps = {}
for d, url in deps.items():
# normpath is required to allow DEPS to use .. in their
# dependency local path.
rel_deps[os.path.normpath(os.path.join(self.name, d))] = url
logging.warning('Updating deps by prepending %s.', self.name)
deps = rel_deps
# 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)))
self.recursedeps = rel_deps
# Convert the deps into real Dependency.
deps_to_add = []
for name, url in deps.iteritems():

@ -720,6 +720,44 @@ class GclientTest(trial_dir.TestCase):
],
self._get_processed())
def testRecursedepsOverrideWithRelativePaths(self):
"""Verifies gclient respects |recursedeps| with relative paths."""
write(
'.gclient',
'solutions = [\n'
' { "name": "foo", "url": "svn://example.com/foo" },\n'
']')
write(
os.path.join('foo', 'DEPS'),
'use_relative_paths = True\n'
'deps = {\n'
' "bar": "/bar",\n'
'}\n'
'recursedeps = {"bar"}')
write(
os.path.join('bar', 'DEPS'),
'deps = {\n'
' "baz": "/baz",\n'
'}')
write(
os.path.join('baz', 'DEPS'),
'deps = {\n'
' "fizz": "/fizz",\n'
'}')
options, _ = gclient.OptionParser().parse_args([])
obj = gclient.GClient.LoadCurrentConfig(options)
obj.RunOnDeps('None', [])
self.assertEquals(
[
'svn://example.com/foo',
# use_relative_paths means the following dep evaluates with 'foo'
# prepended.
'svn://example.com/foo/bar',
],
self._get_processed())
def testRecursionOverridesRecursedeps(self):
"""Verifies gclient respects |recursion| over |recursedeps|.

Loading…
Cancel
Save