Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH] _dep_check_composite_db: select highest in slot conflict (bug 554070)
Date: Wed, 04 Jan 2017 01:14:15
Message-Id: 1483492405-11720-1-git-send-email-zmedico@gentoo.org
1 Fix the _dep_check_composite_db._visible method to select the highest
2 version involved in a slot conflict, for consistency with the change
3 in ab07ac68fa1e04ed64e2e0f6c753ff169a32d517. The included unit test
4 fails without this fix.
5
6 Fixes: ab07ac68fa1e ("depgraph: select highest version involved in slot conflict (bug 554070)")
7 X-Gentoo-Bug: 554070
8 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=554070
9 ---
10 pym/_emerge/depgraph.py | 8 +-
11 .../resolver/test_imagemagick_graphicsmagick.py | 104 +++++++++++++++++++++
12 2 files changed, 110 insertions(+), 2 deletions(-)
13 create mode 100644 pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
14
15 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
16 index e298337..b387bfd 100644
17 --- a/pym/_emerge/depgraph.py
18 +++ b/pym/_emerge/depgraph.py
19 @@ -9130,8 +9130,12 @@ class _dep_check_composite_db(dbapi):
20 # into the same slot.
21 return True
22
23 - in_graph = next(self._depgraph._dynamic_config._package_tracker.match(
24 - self._root, pkg.slot_atom, installed=False), None)
25 + # Use reversed iteration in order to get descending order here,
26 + # so that the highest version involved in a slot conflict is
27 + # selected (see bug 554070).
28 + in_graph = next(reversed(list(
29 + self._depgraph._dynamic_config._package_tracker.match(
30 + self._root, pkg.slot_atom, installed=False))), None)
31
32 if in_graph is None:
33 # Mask choices for packages which are not the highest visible
34 diff --git a/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py b/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
35 new file mode 100644
36 index 0000000..9e52249
37 --- /dev/null
38 +++ b/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
39 @@ -0,0 +1,104 @@
40 +# Copyright 2016 Gentoo Foundation
41 +# Distributed under the terms of the GNU General Public License v2
42 +
43 +from portage.tests import TestCase
44 +from portage.tests.resolver.ResolverPlayground import (
45 + ResolverPlayground,
46 + ResolverPlaygroundTestCase,
47 +)
48 +
49 +class ImageMagickGraphicsMagickTestCase(TestCase):
50 +
51 + def testImageMagickUpdate(self):
52 +
53 + ebuilds = {
54 + "media-gfx/imagemagick-6.9.7.0" : {
55 + "EAPI": "6",
56 + "SLOT": "0/6.9.7.0",
57 + },
58 +
59 + "media-gfx/imagemagick-6.9.6.6" : {
60 + "EAPI": "6",
61 + "SLOT": "0/6.9.6.6",
62 + },
63 +
64 + "media-gfx/inkscape-0.91-r3" : {
65 + "EAPI": "6",
66 + "DEPEND": "media-gfx/imagemagick:=",
67 + "RDEPEND": "media-gfx/imagemagick:=",
68 + },
69 +
70 + "media-video/dvdrip-0.98.11-r3" : {
71 + "EAPI": "6",
72 + "DEPEND": "|| ( media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
73 + "RDEPEND": "|| ( media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
74 + },
75 +
76 + "media-gfx/graphicsmagick-1.3.25" : {
77 + "EAPI": "6",
78 + "SLOT": "0/1.3",
79 + "IUSE": "imagemagick",
80 + "RDEPEND": "imagemagick? ( !media-gfx/imagemagick )",
81 + },
82 + }
83 +
84 + installed = {
85 + "media-gfx/imagemagick-6.9.6.6" : {
86 + "EAPI": "6",
87 + "SLOT": "0/6.9.6.6",
88 + },
89 +
90 + "media-gfx/inkscape-0.91-r3" : {
91 + "EAPI": "6",
92 + "DEPEND": "media-gfx/imagemagick:0/6.9.6.6=",
93 + "RDEPEND": "media-gfx/imagemagick:0/6.9.6.6=",
94 + },
95 +
96 + "media-video/dvdrip-0.98.11-r3" : {
97 + "EAPI": "6",
98 + "DEPEND": "|| ( media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
99 + "RDEPEND": "|| ( media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )",
100 + },
101 +
102 + "media-gfx/graphicsmagick-1.3.25" : {
103 + "EAPI": "6",
104 + "SLOT": "0/1.3",
105 + "IUSE": "imagemagick",
106 + "USE": "",
107 + "RDEPEND": "imagemagick? ( !media-gfx/imagemagick )",
108 + },
109 + }
110 +
111 + world = (
112 + "media-gfx/inkscape",
113 + "media-video/dvdrip",
114 + "media-gfx/graphicsmagick",
115 + )
116 +
117 + test_cases = (
118 +
119 + # bug #554070: imagemagick upgrade triggered erroneous
120 + # autounmask USE change for media-gfx/graphicsmagick[imagemagick]
121 + ResolverPlaygroundTestCase(
122 + ["media-gfx/imagemagick", "@world"],
123 + options = {"--update": True, "--deep": True},
124 + success = True,
125 + mergelist = [
126 + "media-gfx/imagemagick-6.9.7.0",
127 + "media-gfx/inkscape-0.91-r3"
128 + ]
129 + ),
130 +
131 + )
132 +
133 + playground = ResolverPlayground(debug=False,
134 + ebuilds=ebuilds, installed=installed, world=world)
135 + try:
136 + for test_case in test_cases:
137 + playground.run_TestCase(test_case)
138 + self.assertEqual(test_case.test_success, True,
139 + test_case.fail_msg)
140 + finally:
141 + # Disable debug so that cleanup works.
142 + playground.debug = False
143 + playground.cleanup()
144 --
145 2.7.4

Replies