summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-01-21 21:27:20 +0000
committerZac Medico <zmedico@gentoo.org>2009-01-21 21:27:20 +0000
commitbe4d34839c675c19e358d903e9322cad0bba5b05 (patch)
tree8d4c89b3045cba7055b11b5894b64a3acf816844 /pym
parent0a0cff7f2f4782593b9bc66be5da5bbdba70439b (diff)
downloadportage-be4d34839c675c19e358d903e9322cad0bba5b05.tar.gz
portage-be4d34839c675c19e358d903e9322cad0bba5b05.tar.bz2
portage-be4d34839c675c19e358d903e9322cad0bba5b05.zip
In depgraph.loadResumeCommand(), account for unsatisfied dependencies of
installed packages if they are in the subgraph of dependencies of a package which is scheduled to be installed. svn path=/main/trunk/; revision=12542
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/__init__.py34
1 files changed, 29 insertions, 5 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 5802b1396..1252f3874 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -8515,11 +8515,35 @@ class depgraph(object):
if not self._create_graph(allow_unsatisfied=True):
return False
- # TODO: Add sanity checks to make sure that it's really
- # safe to ignore all the deps that can be ignored here.
- unsatisfied_deps = [x for x in self._unsatisfied_deps \
- if isinstance(x.parent, Package) and \
- x.parent.operation == "merge"]
+ unsatisfied_deps = []
+ for dep in self._unsatisfied_deps:
+ if not isinstance(dep.parent, Package):
+ continue
+ if dep.parent.operation == "merge":
+ unsatisfied_deps.append(dep)
+ continue
+
+ # For unsatisfied deps of installed packages, only account for
+ # them if they are in the subgraph of dependencies of a package
+ # which is scheduled to be installed.
+ unsatisfied_install = False
+ traversed = set()
+ dep_stack = self.digraph.parent_nodes(dep.parent)
+ while dep_stack:
+ node = dep_stack.pop()
+ if not isinstance(node, Package):
+ continue
+ if node.operation == "merge":
+ unsatisfied_install = True
+ break
+ if node in traversed:
+ continue
+ traversed.add(node)
+ dep_stack.extend(self.digraph.parent_nodes(node))
+
+ if unsatisfied_install:
+ unsatisfied_deps.append(dep)
+
if masked_tasks or unsatisfied_deps:
# This probably means that a required package
# was dropped via --skipfirst. It makes the