depgraph: fix --exclude/--newuse interaction
authorZac Medico <zmedico@gentoo.org>
Wed, 19 Jun 2013 20:05:28 +0000 (13:05 -0700)
committerZac Medico <zmedico@gentoo.org>
Wed, 19 Jun 2013 20:05:28 +0000 (13:05 -0700)
This fixes a case where an installed package could possibly be rejected
due to --newuse, even though it was selected by --exclude. The problem
may have been triggered randomly by differences in graph traversal
order, which may have been affected by hash randomization (enabled by
default since Python 3.3).

pym/_emerge/depgraph.py

index cb7d3d61e63c596f46aeaf32ec77098feb0b6ed9..3c52159896526e78018a89a41f6ca2ba1a362a0a 100644 (file)
@@ -4915,7 +4915,12 @@ class depgraph(object):
                                                break
                                        # Compare built package to current config and
                                        # reject the built package if necessary.
-                                       if built and not useoldpkg and (not installed or matched_pkgs_ignore_use) and \
+                                       if built and not useoldpkg and \
+                                               (not installed or
+                                               any(other_pkg != pkg for other_pkg in matched_pkgs_ignore_use)) and \
+                                               not (installed and
+                                               self._frozen_config.excluded_pkgs.findAtomForPackage(pkg,
+                                               modified_use=self._pkg_use_enabled(pkg))) and \
                                                ("--newuse" in self._frozen_config.myopts or \
                                                "--reinstall" in self._frozen_config.myopts or \
                                                (not installed and self._dynamic_config.myparams.get(