summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-11-11 19:27:51 +0000
committerZac Medico <zmedico@gentoo.org>2008-11-11 19:27:51 +0000
commit7fda15ffe221c8a4946aba3a10cc3c068616d797 (patch)
tree975a56ce4b2a732ccce865161fc9c01bd60d1347
parent2c39fe1df5c257432f5df687dcd92fd675aa920a (diff)
downloadportage-7fda15ffe221c8a4946aba3a10cc3c068616d797.tar.gz
portage-7fda15ffe221c8a4946aba3a10cc3c068616d797.tar.bz2
portage-7fda15ffe221c8a4946aba3a10cc3c068616d797.zip
Allow --keep-going to continue in some cases when a runtime dependency has
failed to build or install. This involves pruning off the parts of the graph containing installed packages with unsatisfied dependencies. svn path=/main/trunk/; revision=11858
-rw-r--r--pym/_emerge/__init__.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index f0da0e7e2..c5084ac7b 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -12803,7 +12803,7 @@ def resume_depgraph(settings, trees, mtimedb, myopts, myparams, spinner,
# dependency to become unsatisfied.
for parent_node in graph.parent_nodes(pkg):
if not isinstance(parent_node, Package) \
- or parent_node.operation != "merge":
+ or parent_node.operation not in ("merge", "nomerge"):
continue
unsatisfied = \
graph.child_nodes(parent_node,
@@ -12822,7 +12822,14 @@ def resume_depgraph(settings, trees, mtimedb, myopts, myparams, spinner,
# it's already installed, but it has unsatisfied PDEPEND.
raise
mergelist[:] = pruned_mergelist
- dropped_tasks.update(unsatisfied_parents)
+
+ # Exclude installed packages that have been removed from the graph due
+ # to failure to build/install runtime dependencies after the dependent
+ # package has already been installed.
+ dropped_tasks.update(pkg for pkg in \
+ unsatisfied_parents if pkg.operation != "nomerge")
+ mydepgraph.break_refs(unsatisfied_parents)
+
del e, graph, traversed_nodes, \
unsatisfied_parents, unsatisfied_stack
continue