Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: gclient.py

Issue 2324513003: Propagate use_relative_paths into recursedeps (Closed)
Patch Set: Add/fix test for recursion Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/gclient_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient.py
diff --git a/gclient.py b/gclient.py
index 8ebdfc23c51735a20cd6f7bac4817af20d12b9d6..88edbd7af489b3034a16a2c4b3cae426af2f5908 100755
--- a/gclient.py
+++ b/gclient.py
@@ -214,7 +214,7 @@ class DependencySettings(GClientKeywords):
"""Immutable configuration settings."""
def __init__(
self, parent, url, safesync_url, managed, custom_deps, custom_vars,
- custom_hooks, deps_file, should_process):
+ custom_hooks, deps_file, should_process, relative):
GClientKeywords.__init__(self)
# These are not mutable:
@@ -230,6 +230,11 @@ class DependencySettings(GClientKeywords):
# recursion limit and controls gclient's behavior so it does not misbehave.
self._managed = managed
self._should_process = should_process
+ # If this is a recursed-upon sub-dependency, and the parent has
+ # use_relative_paths set, then this dependency should check out its own
+ # dependencies relative to that parent's path for this, rather than
+ # relative to the .gclient file.
+ self._relative = relative
# This is a mutable value which has the list of 'target_os' OSes listed in
# the current deps file.
self.local_target_os = None
@@ -325,11 +330,12 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
"""Object that represents a dependency checkout."""
def __init__(self, parent, name, url, safesync_url, managed, custom_deps,
- custom_vars, custom_hooks, deps_file, should_process):
+ custom_vars, custom_hooks, deps_file, should_process,
+ relative):
gclient_utils.WorkItem.__init__(self, name)
DependencySettings.__init__(
self, parent, url, safesync_url, managed, custom_deps, custom_vars,
- custom_hooks, deps_file, should_process)
+ custom_hooks, deps_file, should_process, relative)
# This is in both .gclient and DEPS files:
self._deps_hooks = []
@@ -686,25 +692,36 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
# the dictionary using paths relative to the directory containing
# the DEPS file. Also update recursedeps if use_relative_paths is
# enabled.
+ # If the deps file doesn't set use_relative_paths, but the parent did
+ # (and therefore set self.relative on this Dependency object), then we
+ # want to modify the deps and recursedeps by prepending the parent
+ # directory of this dependency.
use_relative_paths = local_scope.get('use_relative_paths', False)
+ rel_prefix = None
if use_relative_paths:
+ rel_prefix = self.name
+ elif self._relative:
+ rel_prefix = os.path.dirname(self.name)
+ if rel_prefix:
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)
+ rel_deps[os.path.normpath(os.path.join(rel_prefix, d))] = url
+ logging.warning('Updating deps by prepending %s.', rel_prefix)
deps = rel_deps
# Update recursedeps if it's set.
if self.recursedeps is not None:
- logging.warning('Updating recursedeps by prepending %s.', self.name)
+ logging.warning('Updating recursedeps by prepending %s.', rel_prefix)
rel_deps = {}
for depname, options in self.recursedeps.iteritems():
- rel_deps[os.path.normpath(os.path.join(self.name, depname))] = options
+ rel_deps[
+ os.path.normpath(os.path.join(rel_prefix, depname))] = options
self.recursedeps = rel_deps
+
if 'allowed_hosts' in local_scope:
try:
self._allowed_hosts = frozenset(local_scope.get('allowed_hosts'))
@@ -728,7 +745,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
deps_file = ent['deps_file']
deps_to_add.append(Dependency(
self, name, url, None, None, None, self.custom_vars, None,
- deps_file, should_process))
+ deps_file, should_process, use_relative_paths))
deps_to_add.sort(key=lambda x: x.name)
# override named sets of hooks by the custom hooks
@@ -1217,7 +1234,7 @@ solutions = [
# are processed.
self._recursion_limit = 2
Dependency.__init__(self, None, None, None, None, True, None, None, None,
- 'unused', True)
+ 'unused', True, None)
self._options = options
if options.deps_os:
enforced_os = options.deps_os.split(',')
@@ -1308,7 +1325,8 @@ want to set 'managed': False in .gclient.
s.get('custom_vars', {}),
s.get('custom_hooks', []),
s.get('deps_file', 'DEPS'),
- True))
+ True,
+ None))
except KeyError:
raise gclient_utils.Error('Invalid .gclient file. Solution is '
'incomplete: %s' % s)
« no previous file with comments | « no previous file | tests/gclient_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698