summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-09-14 11:05:16 +0000
committerZac Medico <zmedico@gentoo.org>2009-09-14 11:05:16 +0000
commitc1e83203c56cbb4a9e154c9d8428844a7424db59 (patch)
tree33678356ea3b23a7cc7852ec697d3b738ff4a3f3 /pym/_emerge/depgraph.py
parent160e54481cfd26ac81c8bb1cb919656e52cc185c (diff)
downloadportage-c1e83203c56cbb4a9e154c9d8428844a7424db59.tar.gz
portage-c1e83203c56cbb4a9e154c9d8428844a7424db59.tar.bz2
portage-c1e83203c56cbb4a9e154c9d8428844a7424db59.zip
Reimplement the code from bug #283795 so that indirect deps are preserved
for later use. TODO: Write code to add selected indirect virtual deps to the graph. This will take advantage of circular dependency avoidance that's done by dep_zapdeps. svn path=/main/trunk/; revision=14269
Diffstat (limited to 'pym/_emerge/depgraph.py')
-rw-r--r--pym/_emerge/depgraph.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index b7aa82525..f76954fa8 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -1837,10 +1837,12 @@ class depgraph(object):
pkgsettings = self._frozen_config.pkgsettings[root]
if trees is None:
trees = self._dynamic_config._filtered_trees
+ atom_graph = digraph()
if True:
try:
if parent is not None:
trees[root]["parent"] = parent
+ trees[root]["atom_graph"] = atom_graph
if priority is not None:
trees[root]["priority"] = priority
if not strict:
@@ -1851,12 +1853,26 @@ class depgraph(object):
finally:
if parent is not None:
trees[root].pop("parent")
+ trees[root].pop("atom_graph")
if priority is not None:
trees[root].pop("priority")
portage.dep._dep_check_strict = True
if not mycheck[0]:
raise portage.exception.InvalidDependString(mycheck[1])
+ if parent is None:
selected_atoms = mycheck[1]
+ else:
+ if parent.cpv in atom_graph:
+ # TODO: Write code to add selected indirect virtual deps to
+ # the graph. This will take advantage of circular dependency
+ # avoidance that's done by dep_zapdeps. For now, only return
+ # direct deps here, since we don't want to distort the
+ # dependency graph by mixing indirect deps.
+ direct_deps = set(atom_graph.child_nodes(parent.cpv))
+ selected_atoms = [atom for atom in mycheck[1] \
+ if atom in direct_deps]
+ else:
+ selected_atoms = []
return selected_atoms
def _show_unsatisfied_dep(self, root, atom, myparent=None, arg=None):