diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-01-18 14:17:31 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-01-18 14:17:31 -0800 |
commit | 2553847b6b7795719ee7b4439f34182dcd66fcae (patch) | |
tree | 01372d0e4bd55b34af6222a3b8fb64f7a1cdc07b | |
parent | bd806f0767eb301d884b50ac49a7df812f16f2d8 (diff) | |
download | portage-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.
-rw-r--r-- | pym/_emerge/depgraph.py | 19 | ||||
-rw-r--r-- | 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 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). 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}, |