From 79c07efba28a5fe38561b2decb5021ba21590d29 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 18 Jan 2011 14:17:31 -0800 Subject: [PATCH] Fix some poor installed/masked || choices. This will fix bug #351828. It's fallout from bug #350285. --- pym/_emerge/depgraph.py | 19 +++++++------------ pym/portage/tests/resolver/test_simple.py | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index ba06fbc0f..1a203545f 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 @@ -2914,14 +2914,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, @@ -2933,15 +2935,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). diff --git a/pym/portage/tests/resolver/test_simple.py b/pym/portage/tests/resolver/test_simple.py index 4e69d6564..c3ca9f4d5 100644 --- a/pym/portage/tests/resolver/test_simple.py +++ b/pym/portage/tests/resolver/test_simple.py @@ -1,4 +1,4 @@ -# Copyright 2010 Gentoo Foundation +# Copyright 2010-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from portage.tests import TestCase @@ -8,7 +8,7 @@ class SimpleResolverTestCase(TestCase): def testSimple(self): ebuilds = { - "dev-libs/A-1": {}, + "dev-libs/A-1": { "KEYWORDS": "x86" }, "dev-libs/A-2": { "KEYWORDS": "~x86" }, "dev-libs/B-1.2": {}, @@ -18,17 +18,27 @@ class SimpleResolverTestCase(TestCase): "app-misc/W-1": {}, } installed = { + "dev-libs/A-1": {}, "dev-libs/B-1.1": {}, } test_cases = ( ResolverPlaygroundTestCase(["dev-libs/A"], success = True, mergelist = ["dev-libs/A-1"]), ResolverPlaygroundTestCase(["=dev-libs/A-2"], success = False), + ResolverPlaygroundTestCase( - ["dev-libs/B"], + ["dev-libs/A"], options = {"--noreplace": True}, success = True, mergelist = []), + + # This triggers a replacement since the dev-libs/B-1.1 ebuild + # is not available in the portage tree (see bug #351828). + ResolverPlaygroundTestCase( + ["dev-libs/B"], + options = {"--noreplace": True}, + success = True, + mergelist = ["dev-libs/B-1.2"]), ResolverPlaygroundTestCase( ["dev-libs/B"], options = {"--update": True}, -- 2.26.2