Commit 6014b566 authored by Paweł Hajdan, Jr's avatar Paweł Hajdan, Jr Committed by Commit Bot

gclient flatten: also handle allowed_hosts

Bug: 570091
Change-Id: I96417d462efb3b0476ee17d42ac5f19d8c4f99c3
Reviewed-on: https://chromium-review.googlesource.com/558352Reviewed-by: 's avatarDirk Pranke <dpranke@chromium.org>
Commit-Queue: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
parent 70b3f3aa
......@@ -1722,6 +1722,7 @@ def CMDflatten(parser, args):
if code != 0:
return code
allowed_hosts = set()
deps = {}
deps_os = {}
hooks = []
......@@ -1731,7 +1732,7 @@ def CMDflatten(parser, args):
for solution in client.dependencies:
_FlattenSolution(
solution, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
solution, allowed_hosts, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps)
if options.require_pinned_revisions and unpinned_deps:
......@@ -1743,6 +1744,7 @@ def CMDflatten(parser, args):
_GNSettingsToLines(
client.dependencies[0]._gn_args_file,
client.dependencies[0]._gn_args) +
_AllowedHostsToLines(allowed_hosts) +
_DepsToLines(deps) +
_DepsOsToLines(deps_os) +
_HooksToLines('hooks', hooks) +
......@@ -1761,13 +1763,16 @@ def CMDflatten(parser, args):
def _FlattenSolution(
solution, deps, deps_os, hooks, hooks_os, pre_deps_hooks, unpinned_deps):
solution, allowed_hosts, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps):
"""Visits a solution in order to flatten it (see CMDflatten).
Arguments:
solution (Dependency): one of top-level solutions in .gclient
Out-parameters:
allowed_hosts (set of host names): host names from which
dependencies are allowed (whitelist)
deps (dict of name -> Dependency): will be filled with all Dependency
objects indexed by their name
deps_os (dict of os name -> dep name -> Dependency): same as above,
......@@ -1782,20 +1787,21 @@ def _FlattenSolution(
"""
logging.debug('_FlattenSolution(%r)', solution)
_FlattenDep(solution, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps)
_FlattenRecurse(solution, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps)
_FlattenDep(solution, allowed_hosts, deps, deps_os, hooks, hooks_os,
pre_deps_hooks, unpinned_deps)
_FlattenRecurse(solution, allowed_hosts, deps, deps_os, hooks, hooks_os,
pre_deps_hooks, unpinned_deps)
def _FlattenDep(dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps):
def _FlattenDep(dep, allowed_hosts, deps, deps_os, hooks, hooks_os,
pre_deps_hooks, unpinned_deps):
"""Visits a dependency in order to flatten it (see CMDflatten).
Arguments:
dep (Dependency): dependency to process
Out-parameters:
allowed_hosts (set): will be filled with flattened allowed_hosts
deps (dict): will be filled with flattened deps
deps_os (dict): will be filled with flattened deps_os
hooks (list): will be filled with flattened hooks
......@@ -1805,7 +1811,7 @@ def _FlattenDep(dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
"""
logging.debug('_FlattenDep(%r)', dep)
_AddDep(dep, deps, unpinned_deps)
_AddDep(dep, allowed_hosts, deps, unpinned_deps)
for dep_os, os_deps in dep.os_dependencies.iteritems():
for os_dep in os_deps:
......@@ -1814,10 +1820,9 @@ def _FlattenDep(dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
deps_by_name = dict((d.name, d) for d in dep.dependencies)
for recurse_dep_name in (dep.recursedeps or []):
_FlattenRecurse(
deps_by_name[recurse_dep_name], deps, deps_os, hooks, hooks_os,
pre_deps_hooks, unpinned_deps)
deps_by_name[recurse_dep_name], allowed_hosts, deps, deps_os, hooks,
hooks_os, pre_deps_hooks, unpinned_deps)
# TODO(phajdan.jr): also handle hooks_os.
hooks.extend([(dep, hook) for hook in dep.orig_deps_hooks])
pre_deps_hooks.extend([(dep, hook) for hook in dep.pre_deps_hooks])
......@@ -1825,14 +1830,15 @@ def _FlattenDep(dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
hooks_os.setdefault(hook_os, []).extend([(dep, hook) for hook in os_hooks])
def _FlattenRecurse(dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps):
def _FlattenRecurse(dep, allowed_hosts, deps, deps_os, hooks, hooks_os,
pre_deps_hooks, unpinned_deps):
"""Helper for flatten that recurses into |dep|'s dependencies.
Arguments:
dep (Dependency): dependency to process
Out-parameters:
allowed_hosts (set): will be filled with flattened allowed_hosts
deps (dict): will be filled with flattened deps
deps_os (dict): will be filled with flattened deps_os
hooks (list): will be filled with flattened hooks
......@@ -1843,22 +1849,25 @@ def _FlattenRecurse(dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
logging.debug('_FlattenRecurse(%r)', dep)
for sub_dep in dep.orig_dependencies:
_FlattenDep(sub_dep, deps, deps_os, hooks, hooks_os, pre_deps_hooks,
unpinned_deps)
_FlattenDep(sub_dep, allowed_hosts, deps, deps_os, hooks, hooks_os,
pre_deps_hooks, unpinned_deps)
def _AddDep(dep, deps, unpinned_deps):
def _AddDep(dep, allowed_hosts, deps, unpinned_deps):
"""Helper to add a dependency to flattened lists.
Arguments:
dep (Dependency): dependency to process
Out-parameters:
allowed_hosts (set): will be filled with flattened allowed_hosts
deps (dict): will be filled with flattened deps
unpinned_deps (dict): will be filled with unpinned deps
"""
logging.debug('_AddDep(%r)', dep)
allowed_hosts.update(dep.allowed_hosts)
assert dep.name not in deps
deps[dep.name] = dep
......@@ -1878,6 +1887,17 @@ def _GNSettingsToLines(gn_args_file, gn_args):
return s
def _AllowedHostsToLines(allowed_hosts):
"""Converts |allowed_hosts| set to list of lines for output."""
if not allowed_hosts:
return []
s = ['allowed_hosts = [']
for h in sorted(allowed_hosts):
s.append(' "%s",' % h)
s.extend([']', ''])
return s
def _DepsToLines(deps):
"""Converts |deps| dict to list of lines for output."""
if not deps:
......
......@@ -461,6 +461,9 @@ vars = {
}
gclient_gn_args_file = 'src/gclient.args'
gclient_gn_args = ['DummyVariable']
allowed_hosts = [
'%(git_base)s',
]
deps = {
'src/repo2': {
'url': '%(git_base)srepo_2@%(hash)s',
......
......@@ -581,6 +581,10 @@ class GClientSmokeGIT(GClientSmokeBase):
self.assertEqual([
'gclient_gn_args_file = "src/gclient.args"',
'gclient_gn_args = [\'DummyVariable\']',
'allowed_hosts = [',
' "git://127.0.0.1:20000/git/",',
']',
'',
'deps = {',
' # src -> src/repo2 -> foo/bar',
' "foo/bar": {',
......
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