Gentoo Archives: gentoo-portage-dev

From: "M. J. Everitt" <m.j.everitt@×××.org>
To: gentoo-portage-dev@l.g.o
Subject: Re: [gentoo-portage-dev] [PATCH] depgraph.autounmask_breakage_detected: ignore REQUIRED_USE violations (bug 654782)
Date: Fri, 04 May 2018 13:18:02
Message-Id: 6fa1f32a-34ac-a71e-9a90-8a8db6c73fbe@iee.org
In Reply to: [gentoo-portage-dev] [PATCH] depgraph.autounmask_breakage_detected: ignore REQUIRED_USE violations (bug 654782) by Zac Medico
1 On 04/05/18 06:22, Zac Medico wrote:
2 > When autounmask USE changes violate REQUIRED_USE, rather than
3 > recalculate with autounmask disabled, display the autounmask USE
4 > changes along with the REQUIRED_USE violation. Adjust unit tests
5 > to allow for the autounmask USE changes that were previously
6 > discarded. For the case reported in bug 654782, the output will
7 > appear as follows:
8 >
9 > The following keyword changes are necessary to proceed:
10 > (see "package.accept_keywords" in the portage(5) man page for more details)
11 > # required by =retext-7.0.1-r1 (argument)
12 > =app-editors/retext-7.0.1-r1 ~amd64
13 >
14 > The following USE changes are necessary to proceed:
15 > (see "package.use" in the portage(5) man page for more details)
16 > # required by app-editors/retext-7.0.1-r1::gentoo
17 > # required by =retext-7.0.1-r1 (argument)
18 >> =dev-python/PyQt5-5.9.2 printsupport webengine network gui widgets
19 > !!! The ebuild selected to satisfy "dev-python/PyQt5[gui,network,printsupport,webengine,widgets,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]" has unmet requirements.
20 > - dev-python/PyQt5-5.9.2::gentoo USE="-bluetooth -dbus -debug -declarative -designer -examples -gles2 -gui -help -location -multimedia -network -opengl -positioning -printsupport -sensors -serialport -sql -svg -testlib -webchannel -webengine -webkit -websockets -widgets -x11extras -xmlpatterns" PYTHON_TARGETS="python2_7 python3_4 python3_6 -python3_5"
21 >
22 > The following REQUIRED_USE flag constraints are unsatisfied:
23 > webengine? ( widgets? ( webchannel ) )
24 >
25 > The above constraints are a subset of the following complete expression:
26 > any-of ( python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 ) bluetooth? ( gui ) declarative? ( gui network ) designer? ( widgets ) help? ( gui widgets ) location? ( positioning ) multimedia? ( gui network ) opengl? ( gui widgets ) positioning? ( gui ) printsupport? ( gui widgets ) sensors? ( gui ) serialport? ( gui ) sql? ( widgets ) svg? ( gui widgets ) testlib? ( widgets ) webchannel? ( network ) webengine? ( network widgets? ( printsupport webchannel ) ) webkit? ( gui network printsupport widgets ) websockets? ( network ) widgets? ( gui ) xmlpatterns? ( network )
27 >
28 > (dependency required by "app-editors/retext-7.0.1-r1::gentoo" [ebuild])
29 > (dependency required by "=retext-7.0.1-r1" [argument])
30 >
31 > Bug: https://bugs.gentoo.org/654782
32 > ---
33 > pym/_emerge/depgraph.py | 8 ++--
34 > pym/portage/tests/resolver/test_autounmask.py | 48 ++++++++++++++++++++--
35 > pym/portage/tests/resolver/test_slot_collisions.py | 20 +++++----
36 > 3 files changed, 61 insertions(+), 15 deletions(-)
37 >
38 > diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
39 > index fbd16ad98..429d8871c 100644
40 > --- a/pym/_emerge/depgraph.py
41 > +++ b/pym/_emerge/depgraph.py
42 > @@ -3009,6 +3009,10 @@ class depgraph(object):
43 > {"myparent" : dep.parent, "show_req_use" : pkg}))
44 > self._dynamic_config._required_use_unsatisfied = True
45 > self._dynamic_config._skip_restart = True
46 > + # Add pkg to digraph in order to enable autounmask messages
47 > + # for this package, which is useful when autounmask USE
48 > + # changes have violated REQUIRED_USE.
49 > + self._dynamic_config.digraph.add(pkg, dep.parent, priority=priority)
50 > return 0
51 >
52 > if not pkg.onlydeps:
53 > @@ -9428,10 +9432,6 @@ class depgraph(object):
54 > return self._dynamic_config._need_config_reload
55 >
56 > def autounmask_breakage_detected(self):
57 > - # Check for REQUIRED_USE violations.
58 > - for changes in self._dynamic_config._needed_use_config_changes.values():
59 > - if getattr(changes, 'required_use_satisfied', None) is False:
60 > - return True
61 > try:
62 > for pargs, kwargs in self._dynamic_config._unsatisfied_deps_for_display:
63 > self._show_unsatisfied_dep(
64 > diff --git a/pym/portage/tests/resolver/test_autounmask.py b/pym/portage/tests/resolver/test_autounmask.py
65 > index 9042349ea..809d42104 100644
66 > --- a/pym/portage/tests/resolver/test_autounmask.py
67 > +++ b/pym/portage/tests/resolver/test_autounmask.py
68 > @@ -251,15 +251,42 @@ class AutounmaskTestCase(TestCase):
69 > use_changes={ "dev-util/R-1": { "bar": True } }),
70 >
71 > #Test interaction with REQUIRED_USE.
72 > + # Some of these cases trigger USE change(s) that violate
73 > + # REQUIRED_USE, so the USE changes are shown along with
74 > + # the REQUIRED_USE violation that they would trigger.
75 > +
76 > + # The following USE changes are necessary to proceed:
77 > + # (see "package.use" in the portage(5) man page for more details)
78 > + # # required by app-portage/A-1::test_repo
79 > + # # required by =app-portage/A-1 (argument)
80 > + # >=app-portage/B-1 foo
81 > + #
82 > + # !!! The ebuild selected to satisfy "app-portage/B[foo]" has unmet requirements.
83 > + # - app-portage/B-1::test_repo USE="bar (forced-flag) -foo"
84 > + #
85 > + # The following REQUIRED_USE flag constraints are unsatisfied:
86 > + # exactly-one-of ( foo bar )
87 > ResolverPlaygroundTestCase(
88 > ["=app-portage/A-1"],
89 > options={ "--autounmask": True },
90 > - use_changes=None,
91 > + use_changes={"app-portage/B-1": {"foo": True}},
92 > success=False),
93 > +
94 > + # The following USE changes are necessary to proceed:
95 > + # (see "package.use" in the portage(5) man page for more details)
96 > + # # required by app-portage/A-2::test_repo
97 > + # # required by =app-portage/A-2 (argument)
98 > + # >=app-portage/B-1 foo
99 > + #
100 > + # !!! The ebuild selected to satisfy "app-portage/B[foo=]" has unmet requirements.
101 > + # - app-portage/B-1::test_repo USE="bar (forced-flag) -foo"
102 > + #
103 > + # The following REQUIRED_USE flag constraints are unsatisfied:
104 > + # exactly-one-of ( foo bar )
105 > ResolverPlaygroundTestCase(
106 > ["=app-portage/A-2"],
107 > options={ "--autounmask": True },
108 > - use_changes=None,
109 > + use_changes={"app-portage/B-1": {"foo": True}},
110 > success=False),
111 > ResolverPlaygroundTestCase(
112 > ["=app-portage/C-1"],
113 > @@ -269,10 +296,25 @@ class AutounmaskTestCase(TestCase):
114 >
115 > # Test bug 622462, where it inappropriately unmasked a newer
116 > # version rather than report unsatisfied REQUIRED_USE.
117 > + #
118 > + # The following USE changes are necessary to proceed:
119 > + # (see "package.use" in the portage(5) man page for more details)
120 > + # # required by sci-mathematics/octave-4.2.2::test_repo
121 > + # # required by sci-mathematics/octave (argument)
122 > + # >=x11-libs/qscintilla-2.9.4 qt5
123 > + #
124 > + # !!! The ebuild selected to satisfy ">=x11-libs/qscintilla-2.9.3-r2:=[qt5(+)]" has unmet requirements.
125 > + # - x11-libs/qscintilla-2.9.4::test_repo USE="qt4 -qt5"
126 > + #
127 > + # The following REQUIRED_USE flag constraints are unsatisfied:
128 > + # exactly-one-of ( qt4 qt5 )
129 > + #
130 > + # (dependency required by "sci-mathematics/octave-4.2.2::test_repo" [ebuild])
131 > + # (dependency required by "sci-mathematics/octave" [argument])
132 > ResolverPlaygroundTestCase(
133 > ["sci-mathematics/octave"],
134 > options={"--autounmask": True},
135 > - use_changes=None,
136 > + use_changes={"x11-libs/qscintilla-2.9.4": {"qt5": True}},
137 > success=False),
138 >
139 > #Make sure we don't change masked/forced flags.
140 > diff --git a/pym/portage/tests/resolver/test_slot_collisions.py b/pym/portage/tests/resolver/test_slot_collisions.py
141 > index 9fcd5294a..430ccaad6 100644
142 > --- a/pym/portage/tests/resolver/test_slot_collisions.py
143 > +++ b/pym/portage/tests/resolver/test_slot_collisions.py
144 > @@ -136,15 +136,19 @@ class SlotCollisionTestCase(TestCase):
145 > slot_collision_solutions = [{"sci-libs/Q-1": {"foo": True}, "sci-libs/P-1": {"foo": True}}]
146 > ),
147 >
148 > - #Conflict with REQUIRED_USE
149 > - ResolverPlaygroundTestCase(
150 > - ["=app-misc/C-1", "=app-misc/B-1"],
151 > - all_permutations = True,
152 > - slot_collision_solutions = [],
153 > - mergelist = ["app-misc/A-1", "app-misc/C-1", "app-misc/B-1"],
154 > - ignore_mergelist_order = True,
155 > - success = False),
156 > )
157 > + # NOTE: For this test case, ResolverPlaygroundTestCase attributes
158 > + # vary randomly between runs, so it's expected to fail randomly.
159 > + #Conflict with REQUIRED_USE
160 > + #ResolverPlaygroundTestCase(
161 > + # ["=app-misc/C-1", "=app-misc/B-1"],
162 > + # all_permutations = True,
163 > + # slot_collision_solutions = None,
164 > + # use_changes={"app-misc/A-1": {"foo": True}},
165 > + # mergelist = ["app-misc/A-1", "app-misc/C-1", "app-misc/B-1"],
166 > + # ignore_mergelist_order = True,
167 > + # success = False),
168 > + #)
169 >
170 > playground = ResolverPlayground(ebuilds=ebuilds, installed=installed)
171 > try:
172 More [plain English] explanations of portage hiccups is always welcome!
173
174 Thanks Zac!

Attachments

File name MIME type
signature.asc application/pgp-signature

Replies