Commit fe68c91e authored by Michael Moss's avatar Michael Moss Committed by Commit Bot

Add hierarchy information to flattened "visited DEPS" output.

This will make it easier to programmatically determine where a flattened
entry originated, which is needed for recursively branching and
unpinning DEPS files.

BUG=825063
R=dpranke@google.com

Change-Id: Id280c0b0a95b8664602e0ec4513722fe4d6d1ebf
Reviewed-on: https://chromium-review.googlesource.com/977326Reviewed-by: 's avatarDirk Pranke <dpranke@chromium.org>
Reviewed-by: 's avatarEdward Lesmes <ehmaldonado@chromium.org>
Commit-Queue: Michael Moss <mmoss@chromium.org>
parent ee04b9a2
......@@ -1306,6 +1306,15 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
i = i.parent
return out
def hierarchy_data(self):
"""Returns a machine-readable hierarchical reference to a Dependency."""
d = self
out = []
while d and d.name:
out.insert(0, (d.name, d.url))
d = d.parent
return tuple(out)
def get_vars(self):
"""Returns a dictionary of effective variable values
(DEPS file contents with applied custom_vars overrides)."""
......@@ -2181,7 +2190,7 @@ class Flattener(object):
if not os.path.exists(deps_path):
return
assert dep.parsed_url
self._deps_files.add((dep.parsed_url, deps_file))
self._deps_files.add((dep.parsed_url, deps_file, dep.hierarchy_data()))
for dep in self._deps.itervalues():
add_deps_file(dep)
for os_deps in self._deps_os.itervalues():
......@@ -2200,7 +2209,7 @@ class Flattener(object):
_HooksOsToLines(self._hooks_os) +
_VarsToLines(self._vars) +
['# %s, %s' % (url, deps_file)
for url, deps_file in sorted(self._deps_files)] +
for url, deps_file, _ in sorted(self._deps_files)] +
['']) # Ensure newline at end of file.
def _add_dep(self, dep):
......@@ -2338,7 +2347,7 @@ def CMDflatten(parser, args):
else:
print(flattener.deps_string)
deps_files = [{'url': d[0], 'deps_file': d[1]}
deps_files = [{'url': d[0], 'deps_file': d[1], 'hierarchy': d[2]}
for d in sorted(flattener.deps_files)]
if options.output_deps_files:
with open(options.output_deps_files, 'w') as f:
......
......@@ -1255,9 +1255,16 @@ class GClientSmokeGIT(GClientSmokeBase):
deps_files_contents = json.load(f)
self.assertEqual([
{'url': 'git://127.0.0.1:20000/git/repo_11', 'deps_file': 'DEPS'},
{'url': 'git://127.0.0.1:20000/git/repo_8', 'deps_file': 'DEPS'},
{'url': 'git://127.0.0.1:20000/git/repo_9', 'deps_file': 'DEPS'},
{'url': 'git://127.0.0.1:20000/git/repo_11', 'deps_file': 'DEPS',
'hierarchy': [['src', 'git://127.0.0.1:20000/git/repo_10'],
['src/repo11', '/repo_11']]},
{'url': 'git://127.0.0.1:20000/git/repo_8', 'deps_file': 'DEPS',
'hierarchy': [['src', 'git://127.0.0.1:20000/git/repo_10'],
['src/repo9', '/repo_9'],
['src/repo8', '/repo_8']]},
{'url': 'git://127.0.0.1:20000/git/repo_9', 'deps_file': 'DEPS',
'hierarchy': [['src', 'git://127.0.0.1:20000/git/repo_10'],
['src/repo9', '/repo_9']]},
], deps_files_contents)
def testFlattenCipd(self):
......
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