summaryrefslogtreecommitdiffstats
path: root/pym/_emerge
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-01-18 14:17:31 -0800
committerZac Medico <zmedico@gentoo.org>2011-01-18 14:17:31 -0800
commit2553847b6b7795719ee7b4439f34182dcd66fcae (patch)
tree01372d0e4bd55b34af6222a3b8fb64f7a1cdc07b /pym/_emerge
parentbd806f0767eb301d884b50ac49a7df812f16f2d8 (diff)
downloadportage-2553847b6b7795719ee7b4439f34182dcd66fcae.tar.gz
portage-2553847b6b7795719ee7b4439f34182dcd66fcae.tar.bz2
portage-2553847b6b7795719ee7b4439f34182dcd66fcae.zip
Fix some poor installed/masked || choices.
This will fix bug #351828. It's fallout from bug #350285.
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/depgraph.py19
1 files changed, 7 insertions, 12 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index dfb4fc98d..a6f17dbd2 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2010 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import print_function
@@ -2954,14 +2954,16 @@ class depgraph(object):
continue
reinstall_for_flags = None
- if not pkg.installed or \
- (matched_packages and not avoid_update):
+ if not pkg.installed or matched_packages:
# Only enforce visibility on installed packages
# if there is at least one other visible package
# available. By filtering installed masked packages
# here, packages that have been masked since they
# were installed can be automatically downgraded
- # to an unmasked version.
+ # to an unmasked version. NOTE: This code needs to
+ # be consistent with masking behavior inside
+ # _dep_check_composite_db, in order to prevent
+ # incorrect choices in || deps like bug #351828.
if not self._pkg_visibility_check(pkg, \
allow_unstable_keywords=allow_unstable_keywords,
@@ -2973,15 +2975,8 @@ class depgraph(object):
# version is masked by KEYWORDS, but never
# reinstall the same exact version only due
# to a KEYWORDS mask. See bug #252167.
- if matched_packages:
- different_version = None
- for avail_pkg in matched_packages:
- if not portage.dep.cpvequal(
- pkg.cpv, avail_pkg.cpv):
- different_version = avail_pkg
- break
- if different_version is not None:
+ if matched_packages:
# If the ebuild no longer exists or it's
# keywords have been dropped, reject built
# instances (installed or binary).