summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/depgraph.py19
-rw-r--r--pym/portage/tests/resolver/test_simple.py16
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},