summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2013-06-19 13:05:28 -0700
committerZac Medico <zmedico@gentoo.org>2013-06-19 13:05:28 -0700
commitca2e34f3b9615c4f1e1d6d258fa5dab6f6c3d6dd (patch)
treeb34da71dc91a8ac426bf48e3e49d2af9f24d75a0
parentRepoConfigLoader: fix last commit (diff)
downloadportage-ca2e34f3b9615c4f1e1d6d258fa5dab6f6c3d6dd.tar.gz
portage-ca2e34f3b9615c4f1e1d6d258fa5dab6f6c3d6dd.tar.bz2
portage-ca2e34f3b9615c4f1e1d6d258fa5dab6f6c3d6dd.zip
depgraph: fix --exclude/--newuse interaction
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).
-rw-r--r--pym/_emerge/depgraph.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index cb7d3d61e..3c5215989 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -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(