diff options
author | Zac Medico <zmedico@gentoo.org> | 2013-06-19 13:05:28 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2013-06-19 13:05:28 -0700 |
commit | ca2e34f3b9615c4f1e1d6d258fa5dab6f6c3d6dd (patch) | |
tree | b34da71dc91a8ac426bf48e3e49d2af9f24d75a0 | |
parent | RepoConfigLoader: fix last commit (diff) | |
download | portage-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.py | 7 |
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( |