From 220d917e819e2c002bbab65feeb842da649d3024 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 28 Nov 2009 22:18:13 +0000 Subject: Bug #294945 - Fix blocker satistfied state handling inside depgraph, to avoid a KeyError when displaying blockers. (trunk r14914) svn path=/main/branches/2.1.7/; revision=14917 --- pym/_emerge/depgraph.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 68477529..8097637f 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -3775,16 +3775,12 @@ class depgraph(object): # it serves as an indicator that blocking packages # will be temporarily installed simultaneously. for blocker in solved_blockers: - blocker.satisfied = True retlist.append(blocker) unsolvable_blockers = set(self._dynamic_config._unsolvable_blockers.leaf_nodes()) for node in myblocker_uninstalls.root_nodes(): unsolvable_blockers.add(node) - for blocker in unsolvable_blockers: - retlist.append(blocker) - # If any Uninstall tasks need to be executed in order # to avoid a conflict, complete the graph with any # dependencies that may have been initially @@ -3796,6 +3792,16 @@ class depgraph(object): self._dynamic_config.myparams["complete"] = True raise self._serialize_tasks_retry("") + # Set satisfied state on blockers, but not before the + # above retry path, since we don't want to modify the + # state in that case. + for node in retlist: + if isinstance(node, Blocker): + node.satisfied = True + + for blocker in unsolvable_blockers: + retlist.append(blocker) + if unsolvable_blockers and \ not self._accept_blocker_conflicts(): self._dynamic_config._unsatisfied_blockers_for_display = unsolvable_blockers -- cgit v1.2.3-65-gdbad