Fix a logic error which causes blockers from installed packages to be
authorZac Medico <zmedico@gentoo.org>
Wed, 24 Feb 2010 05:15:19 +0000 (05:15 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 24 Feb 2010 05:15:19 +0000 (05:15 -0000)
ignored in some cases. Thanks to Brian Dolbec (dol-sen) for reporting.

svn path=/main/trunk/; revision=15446

pym/_emerge/depgraph.py

index e6bffbc7049c1e160da1c42f664d200f87708f52..86b4cfccfaf108ab989d701df0424f2b627cf1c3 100644 (file)
@@ -141,6 +141,10 @@ class _dynamic_depgraph_config(object):
                # uninstallation but may not have been added to the graph
                # if the graph is not complete yet.
                self._blocked_world_pkgs = {}
+               # Contains packages whose dependencies have been traversed.
+               # This use used to check if we have accounted for blockers
+               # relevant to a package.
+               self._traversed_pkg_deps = set()
                self._slot_collision_info = {}
                # Slot collision nodes are not allowed to block other packages since
                # blocker validation is only able to account for one package per slot.
@@ -1211,6 +1215,7 @@ class depgraph(object):
                        return 0
                finally:
                        portage.dep._dep_check_strict = True
+               self._dynamic_config._traversed_pkg_deps.add(pkg)
                return 1
 
        def _add_pkg_dep_string(self, pkg, dep_root, dep_priority, dep_string,
@@ -2848,6 +2853,8 @@ class depgraph(object):
                                        cpv = pkg.cpv
                                        stale_cache.discard(cpv)
                                        pkg_in_graph = self._dynamic_config.digraph.contains(pkg)
+                                       pkg_deps_added = \
+                                               pkg in self._dynamic_config._traversed_pkg_deps
 
                                        # Check for masked installed packages. Only warn about
                                        # packages that are in the graph in order to avoid warning
@@ -2864,7 +2871,7 @@ class depgraph(object):
 
                                        blocker_atoms = None
                                        blockers = None
-                                       if pkg_in_graph:
+                                       if pkg_deps_added:
                                                blockers = []
                                                try:
                                                        blockers.extend(