commit: 033477d6a4cc1adcabed966b8aa82b51b42af33c
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Jan 4 00:54:47 2017 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Jan 4 23:40:42 2017 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=033477d6
_dep_check_composite_db: select highest in slot conflict (bug 554070)
Fix the _dep_check_composite_db._visible method to select the highest
version involved in a slot conflict, for consistency with the change
in ab07ac68fa1e04ed64e2e0f6c753ff169a32d517. The included unit test
fails without this fix.
Fixes: ab07ac68fa1e ("depgraph: select highest version involved in slot
conflict (bug 554070)")
X-Gentoo-Bug: 554070
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=554070
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>
pym/_emerge/depgraph.py | 10 +-
.../resolver/test_imagemagick_graphicsmagick.py | 104 +++++++++++++++++++++
2 files changed, 111 insertions(+), 3 deletions(-)
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index e298337..7a1427d 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import division, print_function, unicode_literals
@@ -9130,8 +9130,12 @@ class _dep_check_composite_db(dbapi):
# into the same slot.
return True
- in_graph =
next(self._depgraph._dynamic_config._package_tracker.match(
- self._root, pkg.slot_atom, installed=False), None)
+ # Use reversed iteration in order to get descending order here,
+ # so that the highest version involved in a slot conflict is
+ # selected (see bug 554070).
+ in_graph = next(reversed(list(
+ self._depgraph._dynamic_config._package_tracker.match(
+ self._root, pkg.slot_atom, installed=False))), None)
if in_graph is None:
# Mask choices for packages which are not the highest
visible
diff --git a/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
b/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
new file mode 100644
index 0000000..e5a3d7d
--- /dev/null
+++ b/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
@@ -0,0 +1,104 @@
+# Copyright 2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+ ResolverPlayground,
+ ResolverPlaygroundTestCase,
+)
+
+class ImageMagickGraphicsMagickTestCase(TestCase):
+
+ def testImageMagickUpdate(self):
+
+ ebuilds = {
+ "media-gfx/imagemagick-6.9.7.0" : {
+ "EAPI": "6",
+ "SLOT": "0/6.9.7.0",
+ },
+
+ "media-gfx/imagemagick-6.9.6.6" : {
+ "EAPI": "6",
+ "SLOT": "0/6.9.6.6",
+ },
+
+ "media-gfx/inkscape-0.91-r3" : {
+ "EAPI": "6",
+ "DEPEND": "media-gfx/imagemagick:=",
+ "RDEPEND": "media-gfx/imagemagick:=",
+ },
+
+ "media-video/dvdrip-0.98.11-r3" : {
+ "EAPI": "6",
+ "DEPEND": "|| (
media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
+ "RDEPEND": "|| (
media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
+ },
+
+ "media-gfx/graphicsmagick-1.3.25" : {
+ "EAPI": "6",
+ "SLOT": "0/1.3",
+ "IUSE": "imagemagick",
+ "RDEPEND": "imagemagick? (
!media-gfx/imagemagick )",
+ },
+ }
+
+ installed = {
+ "media-gfx/imagemagick-6.9.6.6" : {
+ "EAPI": "6",
+ "SLOT": "0/6.9.6.6",
+ },
+
+ "media-gfx/inkscape-0.91-r3" : {
+ "EAPI": "6",
+ "DEPEND": "media-gfx/imagemagick:0/6.9.6.6=",
+ "RDEPEND": "media-gfx/imagemagick:0/6.9.6.6=",
+ },
+
+ "media-video/dvdrip-0.98.11-r3" : {
+ "EAPI": "6",
+ "DEPEND": "|| (
media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
+ "RDEPEND": "|| (
media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
+ },
+
+ "media-gfx/graphicsmagick-1.3.25" : {
+ "EAPI": "6",
+ "SLOT": "0/1.3",
+ "IUSE": "imagemagick",
+ "USE": "",
+ "RDEPEND": "imagemagick? (
!media-gfx/imagemagick )",
+ },
+ }
+
+ world = (
+ "media-gfx/inkscape",
+ "media-video/dvdrip",
+ "media-gfx/graphicsmagick",
+ )
+
+ test_cases = (
+
+ # bug #554070: imagemagick upgrade triggered erroneous
+ # autounmask USE change for
media-gfx/graphicsmagick[imagemagick]
+ ResolverPlaygroundTestCase(
+ ["media-gfx/imagemagick", "@world"],
+ options = {"--update": True, "--deep": True},
+ success = True,
+ mergelist = [
+ "media-gfx/imagemagick-6.9.7.0",
+ "media-gfx/inkscape-0.91-r3"
+ ]
+ ),
+
+ )
+
+ playground = ResolverPlayground(debug=False,
+ ebuilds=ebuilds, installed=installed, world=world)
+ try:
+ for test_case in test_cases:
+ playground.run_TestCase(test_case)
+ self.assertEqual(test_case.test_success, True,
+ test_case.fail_msg)
+ finally:
+ # Disable debug so that cleanup works.
+ playground.debug = False
+ playground.cleanup()