1 |
On Sun, 3 Dec 2017 15:19:44 -0800 |
2 |
Zac Medico <zmedico@g.o> wrote: |
3 |
|
4 |
> Since built-time deps tend to be a superset of run-time deps, evaluate |
5 |
> disjunctive build-time deps before run-time deps, so that choices for |
6 |
> build-time deps influence choices for run-time deps. |
7 |
> |
8 |
> Also, fix OnlydepsMinimalTestCase to specify ambiguous_merge_order, |
9 |
> since the merge order is affected by the order of evaluation. |
10 |
> |
11 |
> Bug: https://bugs.gentoo.org/639346 |
12 |
> --- |
13 |
> pym/_emerge/depgraph.py | 12 ++- |
14 |
> .../resolver/test_disjunctive_depend_order.py | 87 |
15 |
> ++++++++++++++++++++++ .../tests/resolver/test_onlydeps_minimal.py |
16 |
> | 5 +- 3 files changed, 98 insertions(+), 6 deletions(-) |
17 |
> create mode 100644 |
18 |
> pym/portage/tests/resolver/test_disjunctive_depend_order.py |
19 |
> |
20 |
> diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py |
21 |
> index f54acdc26..6e5ca6508 100644 |
22 |
> --- a/pym/_emerge/depgraph.py |
23 |
> +++ b/pym/_emerge/depgraph.py |
24 |
> @@ -3234,7 +3234,15 @@ class depgraph(object): |
25 |
> if ignore_hdepend_deps: |
26 |
> edepend["HDEPEND"] = "" |
27 |
> |
28 |
> + # Since build-time deps tend to be a superset of |
29 |
> run-time deps, order |
30 |
> + # dep processing such that build-time deps are |
31 |
> popped from |
32 |
> + # _dep_disjunctive_stack first, so that choices for |
33 |
> build-time |
34 |
> + # deps influence choices for run-time deps (bug |
35 |
> 639346). deps = ( |
36 |
> + (myroot, edepend["RDEPEND"], |
37 |
> + self._priority(runtime=True)), |
38 |
> + (myroot, edepend["PDEPEND"], |
39 |
> + self._priority(runtime_post=True)), |
40 |
> (depend_root, edepend["DEPEND"], |
41 |
> self._priority(buildtime=True, |
42 |
> optional=(pkg.built or |
43 |
> ignore_depend_deps), @@ -3243,10 +3251,6 @@ class depgraph(object): |
44 |
> self._priority(buildtime=True, |
45 |
> optional=(pkg.built or |
46 |
> ignore_hdepend_deps), ignored=ignore_hdepend_deps)), |
47 |
> - (myroot, edepend["RDEPEND"], |
48 |
> - self._priority(runtime=True)), |
49 |
> - (myroot, edepend["PDEPEND"], |
50 |
> - self._priority(runtime_post=True)) |
51 |
> ) |
52 |
> |
53 |
> debug = "--debug" in self._frozen_config.myopts |
54 |
> diff --git |
55 |
> a/pym/portage/tests/resolver/test_disjunctive_depend_order.py |
56 |
> b/pym/portage/tests/resolver/test_disjunctive_depend_order.py new |
57 |
> file mode 100644 index 000000000..88f6dac2d --- /dev/null |
58 |
> +++ b/pym/portage/tests/resolver/test_disjunctive_depend_order.py |
59 |
> @@ -0,0 +1,87 @@ |
60 |
> +# Copyright 2017 Gentoo Foundation |
61 |
> +# Distributed under the terms of the GNU General Public License v2 |
62 |
> + |
63 |
> +from portage.tests import TestCase |
64 |
> +from portage.tests.resolver.ResolverPlayground import ( |
65 |
> + ResolverPlayground, |
66 |
> + ResolverPlaygroundTestCase, |
67 |
> +) |
68 |
> + |
69 |
> +class DisjunctiveDependOrderTestCase(TestCase): |
70 |
> + |
71 |
> + def testDisjunctiveDependOrderTestCase(self): |
72 |
> + ebuilds = { |
73 |
> + 'virtual/jre-1.8': { |
74 |
> + 'EAPI': '6', |
75 |
> + 'SLOT' : '1.8', |
76 |
> + 'RDEPEND' : '|| |
77 |
> ( dev-java/oracle-jre-bin:1.8 virtual/jdk:1.8 )', |
78 |
> + }, |
79 |
> + 'virtual/jdk-1.8': { |
80 |
> + 'EAPI': '6', |
81 |
> + 'SLOT' : '1.8', |
82 |
> + 'RDEPEND' : '|| ( dev-java/icedtea:8 |
83 |
> dev-java/oracle-jdk-bin:1.8 )', |
84 |
> + }, |
85 |
> + 'dev-java/icedtea-3.6': { |
86 |
> + 'SLOT' : '8', |
87 |
> + }, |
88 |
> + 'dev-java/oracle-jdk-bin-1.8': { |
89 |
> + 'SLOT' : '1.8', |
90 |
> + }, |
91 |
> + 'dev-java/oracle-jre-bin-1.8': { |
92 |
> + 'SLOT' : '1.8', |
93 |
> + }, |
94 |
> + 'dev-db/hsqldb-1.8' : { |
95 |
> + 'DEPEND' : 'virtual/jdk', |
96 |
> + 'RDEPEND' : 'virtual/jre', |
97 |
> + }, |
98 |
> + } |
99 |
> + |
100 |
> + binpkgs = { |
101 |
> + 'dev-db/hsqldb-1.8' : { |
102 |
> + 'DEPEND' : 'virtual/jdk', |
103 |
> + 'RDEPEND' : 'virtual/jre', |
104 |
> + }, |
105 |
> + } |
106 |
> + |
107 |
> + test_cases = ( |
108 |
> + # Test bug 639346, where a redundant jre |
109 |
> implementation |
110 |
> + # was pulled in because DEPEND was evaluated |
111 |
> after |
112 |
> + # RDEPEND. |
113 |
> + ResolverPlaygroundTestCase( |
114 |
> + ['dev-db/hsqldb'], |
115 |
> + success=True, |
116 |
> + mergelist=[ |
117 |
> + 'dev-java/icedtea-3.6', |
118 |
> + 'virtual/jdk-1.8', |
119 |
> + 'virtual/jre-1.8', |
120 |
> + 'dev-db/hsqldb-1.8', |
121 |
> + ], |
122 |
> + ), |
123 |
> + |
124 |
> + # The jdk is not needed with --usepkg, so |
125 |
> the jre should |
126 |
> + # be preferred in this case. |
127 |
> + ResolverPlaygroundTestCase( |
128 |
> + ['dev-db/hsqldb'], |
129 |
> + options = { |
130 |
> + '--usepkg': True |
131 |
> + }, |
132 |
> + success=True, |
133 |
> + mergelist=[ |
134 |
> + 'dev-java/oracle-jre-bin-1.8', |
135 |
> + 'virtual/jre-1.8', |
136 |
> + '[binary]dev-db/hsqldb-1.8', |
137 |
> + ], |
138 |
> + ), |
139 |
> + ) |
140 |
> + |
141 |
> + playground = ResolverPlayground(debug=False, |
142 |
> + binpkgs=binpkgs, ebuilds=ebuilds) |
143 |
> + |
144 |
> + try: |
145 |
> + for test_case in test_cases: |
146 |
> + playground.run_TestCase(test_case) |
147 |
> + |
148 |
> self.assertEqual(test_case.test_success, True, |
149 |
> + test_case.fail_msg) |
150 |
> + finally: |
151 |
> + playground.debug = False |
152 |
> + playground.cleanup() |
153 |
> diff --git a/pym/portage/tests/resolver/test_onlydeps_minimal.py |
154 |
> b/pym/portage/tests/resolver/test_onlydeps_minimal.py index |
155 |
> 13c79ed55..efda02c59 100644 --- |
156 |
> a/pym/portage/tests/resolver/test_onlydeps_minimal.py +++ |
157 |
> b/pym/portage/tests/resolver/test_onlydeps_minimal.py @@ -25,9 +25,10 |
158 |
> @@ class OnlydepsMinimalTestCase(TestCase): success = True, |
159 |
> options = { "--onlydeps": True, |
160 |
> "--onlydeps-with-rdeps": |
161 |
> "y" }, |
162 |
> - mergelist = ["dev-libs/B-1", |
163 |
> + ambiguous_merge_order = True, |
164 |
> + mergelist = [("dev-libs/B-1", |
165 |
> "dev-libs/C-1", |
166 |
> - "dev-libs/D-1"]), |
167 |
> + "dev-libs/D-1")]), |
168 |
> ResolverPlaygroundTestCase( |
169 |
> ["dev-libs/A"], |
170 |
> all_permutations = True, |
171 |
|
172 |
looks good |
173 |
|
174 |
-- |
175 |
Brian Dolbec <dolsen> |