Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/, lib/_emerge/
Date: Wed, 02 Dec 2020 08:32:57
Message-Id: 1606896387.07a604537e746814613dc171a5c09072ef0266af.zmedico@gentoo
1 commit: 07a604537e746814613dc171a5c09072ef0266af
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Wed Dec 2 07:08:04 2020 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Wed Dec 2 08:06:27 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=07a60453
7
8 find_smallest_cycle: don't merge satisfied PDEPEND too early
9
10 After PDEPENDs have been neglected by the find_smallest_cycle function,
11 do not try to merge them too early if they are already satisfied by
12 an installed package. This fixes incorrect merge order for PDEPEND
13 cycles involving xorg-server and xorg-drivers, which was triggered
14 by commit 5095c2023595a75e2848f1ad3dbe25b5fb451a44 because it gave
15 PDEPEND higher priority than satisfied buildtime dependencies.
16
17 Fixes: 5095c2023595 ("find_smallest_cycle: enhance search prioritization")
18 Reported-by: josef64 in #gentoo-portage
19 Bug: https://bugs.gentoo.org/754903
20 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
21
22 lib/_emerge/DepPrioritySatisfiedRange.py | 1 +
23 lib/_emerge/depgraph.py | 8 ++++----
24 lib/portage/tests/resolver/test_merge_order.py | 27 ++++++++++++++++++++++++--
25 3 files changed, 30 insertions(+), 6 deletions(-)
26
27 diff --git a/lib/_emerge/DepPrioritySatisfiedRange.py b/lib/_emerge/DepPrioritySatisfiedRange.py
28 index fb0d7db4e..f546590e0 100644
29 --- a/lib/_emerge/DepPrioritySatisfiedRange.py
30 +++ b/lib/_emerge/DepPrioritySatisfiedRange.py
31 @@ -93,6 +93,7 @@ class DepPrioritySatisfiedRange:
32 ignore_medium = _ignore_runtime
33 ignore_medium_soft = _ignore_satisfied_buildtime_slot_op
34 ignore_medium_post = _ignore_runtime_post
35 + ignore_medium_post_satisifed = _ignore_satisfied_runtime_post
36 ignore_soft = _ignore_optional
37
38
39
40 diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
41 index 1271bda3e..0450291d4 100644
42 --- a/lib/_emerge/depgraph.py
43 +++ b/lib/_emerge/depgraph.py
44 @@ -8052,18 +8052,18 @@ class depgraph:
45 (selected_nodes[0],), noiselevel=-1)
46
47 if selected_nodes and ignore_priority is not None:
48 - # Try to merge ignored medium_post deps as soon as possible
49 + # Try to merge neglected medium_post deps as soon as possible
50 # if they're not satisfied by installed packages.
51 for node in selected_nodes:
52 children = set(mygraph.child_nodes(node))
53 - soft = children.difference(
54 + medium_post_satisifed = children.difference(
55 mygraph.child_nodes(node,
56 ignore_priority = \
57 - DepPrioritySatisfiedRange.ignore_soft))
58 + DepPrioritySatisfiedRange.ignore_medium_post_satisifed))
59 medium_post = children.difference(
60 mygraph.child_nodes(node,
61 ignore_priority=DepPrioritySatisfiedRange.ignore_medium_post))
62 - medium_post -= soft
63 + medium_post -= medium_post_satisifed
64 for child in medium_post:
65 if child in selected_nodes:
66 continue
67
68 diff --git a/lib/portage/tests/resolver/test_merge_order.py b/lib/portage/tests/resolver/test_merge_order.py
69 index f81fd2f6f..0510a0636 100644
70 --- a/lib/portage/tests/resolver/test_merge_order.py
71 +++ b/lib/portage/tests/resolver/test_merge_order.py
72 @@ -217,12 +217,23 @@ class MergeOrderTestCase(TestCase):
73 "IUSE" : "X +encode",
74 "RDEPEND" : "|| ( >=media-video/ffmpeg-0.6.90_rc0-r2[X=,encode=] >=media-video/libav-0.6.90_rc[X=,encode=] )",
75 },
76 + "x11-base/xorg-drivers-1.20-r2": {
77 + "EAPI": "7",
78 + "IUSE": "+video_cards_fbdev",
79 + "PDEPEND": "x11-base/xorg-server video_cards_fbdev? ( x11-drivers/xf86-video-fbdev )",
80 + },
81 "x11-base/xorg-server-1.14.1" : {
82 "EAPI" : "5",
83 "SLOT": "0/1.14.1",
84 "DEPEND" : "media-libs/mesa",
85 "RDEPEND" : "media-libs/mesa",
86 + "PDEPEND": "x11-base/xorg-drivers",
87 },
88 + "x11-drivers/xf86-video-fbdev-0.5.0-r1": {
89 + "EAPI": "7",
90 + "DEPEND": "x11-base/xorg-server:=",
91 + "RDEPEND": "x11-base/xorg-server",
92 + }
93 }
94
95 installed = {
96 @@ -299,12 +310,24 @@ class MergeOrderTestCase(TestCase):
97 "USE" : "encode",
98 "RDEPEND" : "|| ( >=media-video/ffmpeg-0.6.90_rc0-r2[X=,encode=] >=media-video/libav-0.6.90_rc[X=,encode=] )",
99 },
100 + "x11-base/xorg-drivers-1.20-r2": {
101 + "EAPI": "7",
102 + "IUSE": "+video_cards_fbdev",
103 + "USE": "video_cards_fbdev",
104 + "PDEPEND": "x11-base/xorg-server x11-drivers/xf86-video-fbdev",
105 + },
106 "x11-base/xorg-server-1.14.1" : {
107 "EAPI" : "5",
108 "SLOT": "0/1.14.1",
109 "DEPEND" : "media-libs/mesa",
110 "RDEPEND" : "media-libs/mesa",
111 + "PDEPEND": "x11-base/xorg-drivers",
112 },
113 + "x11-drivers/xf86-video-fbdev-0.5.0-r1": {
114 + "EAPI": "7",
115 + "DEPEND": "x11-base/xorg-server:0/1.14.1=",
116 + "RDEPEND": "x11-base/xorg-server",
117 + }
118 }
119
120 test_cases = (
121 @@ -486,10 +509,10 @@ class MergeOrderTestCase(TestCase):
122 # Both deps are already satisfied by installed packages, but
123 # the := dep is given higher priority in merge order.
124 ResolverPlaygroundTestCase(
125 - ["media-libs/mesa", "x11-base/xorg-server"],
126 + ["media-libs/mesa", "x11-drivers/xf86-video-fbdev", "x11-base/xorg-server"],
127 success=True,
128 all_permutations = True,
129 - mergelist = ['x11-base/xorg-server-1.14.1', 'media-libs/mesa-9.1.3']),
130 + mergelist = ['x11-base/xorg-server-1.14.1', 'media-libs/mesa-9.1.3', 'x11-drivers/xf86-video-fbdev-0.5.0-r1']),
131 # Test prioritization of the find_smallest_cycle function, which should
132 # minimize the use of installed packages to break cycles. If installed
133 # packages must be used to break cycles, then it should prefer to do this