On 05/04/2018 06:17 AM, M. J. Everitt wrote:
> On 04/05/18 06:22, Zac Medico wrote:
>> When autounmask USE changes violate REQUIRED_USE, rather than
>> recalculate with autounmask disabled, display the autounmask USE
>> changes along with the REQUIRED_USE violation. Adjust unit tests
>> to allow for the autounmask USE changes that were previously
>> discarded. For the case reported in bug 654782, the output will
>> appear as follows:
>>
>> The following keyword changes are necessary to proceed:
>>  (see "package.accept_keywords" in the portage(5) man page for more details)
>> # required by =retext-7.0.1-r1 (argument)
>> =app-editors/retext-7.0.1-r1 ~amd64
>>
>> The following USE changes are necessary to proceed:
>>  (see "package.use" in the portage(5) man page for more details)
>> # required by app-editors/retext-7.0.1-r1::gentoo
>> # required by =retext-7.0.1-r1 (argument)
>>> =dev-python/PyQt5-5.9.2 printsupport webengine network gui widgets
>> !!! 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.
>> - 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"
>>
>>   The following REQUIRED_USE flag constraints are unsatisfied:
>>     webengine? ( widgets? ( webchannel ) )
>>
>>   The above constraints are a subset of the following complete expression:
>>     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 )
>>
>> (dependency required by "app-editors/retext-7.0.1-r1::gentoo" [ebuild])
>> (dependency required by "=retext-7.0.1-r1" [argument])
>>
>> Bug: https://bugs.gentoo.org/654782
>> ---
>>  pym/_emerge/depgraph.py                            |  8 ++--
>>  pym/portage/tests/resolver/test_autounmask.py      | 48 
>> ++++++++++++++++++++--
>>  pym/portage/tests/resolver/test_slot_collisions.py | 20 +++++----
>>  3 files changed, 61 insertions(+), 15 deletions(-)
>>
>> diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
>> index fbd16ad98..429d8871c 100644
>> --- a/pym/_emerge/depgraph.py
>> +++ b/pym/_emerge/depgraph.py
>> @@ -3009,6 +3009,10 @@ class depgraph(object):
>>                                      {"myparent" : dep.parent, 
>> "show_req_use" : pkg}))
>>                              self._dynamic_config._required_use_unsatisfied 
>> = True
>>                              self._dynamic_config._skip_restart = True
>> +                            # Add pkg to digraph in order to enable 
>> autounmask messages
>> +                            # for this package, which is useful when 
>> autounmask USE
>> +                            # changes have violated REQUIRED_USE.
>> +                            self._dynamic_config.digraph.add(pkg, 
>> dep.parent, priority=priority)
>>                              return 0
>>  
>>              if not pkg.onlydeps:
>> @@ -9428,10 +9432,6 @@ class depgraph(object):
>>              return self._dynamic_config._need_config_reload
>>  
>>      def autounmask_breakage_detected(self):
>> -            # Check for REQUIRED_USE violations.
>> -            for changes in 
>> self._dynamic_config._needed_use_config_changes.values():
>> -                    if getattr(changes, 'required_use_satisfied', None) is 
>> False:
>> -                            return True
>>              try:
>>                      for pargs, kwargs in 
>> self._dynamic_config._unsatisfied_deps_for_display:
>>                              self._show_unsatisfied_dep(
>> diff --git a/pym/portage/tests/resolver/test_autounmask.py 
>> b/pym/portage/tests/resolver/test_autounmask.py
>> index 9042349ea..809d42104 100644
>> --- a/pym/portage/tests/resolver/test_autounmask.py
>> +++ b/pym/portage/tests/resolver/test_autounmask.py
>> @@ -251,15 +251,42 @@ class AutounmaskTestCase(TestCase):
>>                                      use_changes={ "dev-util/R-1": { "bar": 
>> True } }),
>>  
>>                              #Test interaction with REQUIRED_USE.
>> +                            # Some of these cases trigger USE change(s) 
>> that violate
>> +                            # REQUIRED_USE, so the USE changes are shown 
>> along with
>> +                            # the REQUIRED_USE violation that they would 
>> trigger.
>> +
>> +                            # The following USE changes are necessary to 
>> proceed:
>> +                            #  (see "package.use" in the portage(5) man 
>> page for more details)
>> +                            # # required by app-portage/A-1::test_repo
>> +                            # # required by =app-portage/A-1 (argument)
>> +                            # >=app-portage/B-1 foo
>> +                            #
>> +                            # !!! The ebuild selected to satisfy 
>> "app-portage/B[foo]" has unmet requirements.
>> +                            # - app-portage/B-1::test_repo USE="bar 
>> (forced-flag) -foo"
>> +                            #
>> +                            #   The following REQUIRED_USE flag constraints 
>> are unsatisfied:
>> +                            #     exactly-one-of ( foo bar )
>>                              ResolverPlaygroundTestCase(
>>                                      ["=app-portage/A-1"],
>>                                      options={ "--autounmask": True },
>> -                                    use_changes=None,
>> +                                    use_changes={"app-portage/B-1": {"foo": 
>> True}},
>>                                      success=False),
>> +
>> +                            # The following USE changes are necessary to 
>> proceed:
>> +                            #  (see "package.use" in the portage(5) man 
>> page for more details)
>> +                            # # required by app-portage/A-2::test_repo
>> +                            # # required by =app-portage/A-2 (argument)
>> +                            # >=app-portage/B-1 foo
>> +                            #
>> +                            # !!! The ebuild selected to satisfy 
>> "app-portage/B[foo=]" has unmet requirements.
>> +                            # - app-portage/B-1::test_repo USE="bar 
>> (forced-flag) -foo"
>> +                            #
>> +                            #   The following REQUIRED_USE flag constraints 
>> are unsatisfied:
>> +                            #     exactly-one-of ( foo bar )
>>                              ResolverPlaygroundTestCase(
>>                                      ["=app-portage/A-2"],
>>                                      options={ "--autounmask": True },
>> -                                    use_changes=None,
>> +                                    use_changes={"app-portage/B-1": {"foo": 
>> True}},
>>                                      success=False),
>>                              ResolverPlaygroundTestCase(
>>                                      ["=app-portage/C-1"],
>> @@ -269,10 +296,25 @@ class AutounmaskTestCase(TestCase):
>>  
>>                              # Test bug 622462, where it inappropriately 
>> unmasked a newer
>>                              # version rather than report unsatisfied 
>> REQUIRED_USE.
>> +                            #
>> +                            # The following USE changes are necessary to 
>> proceed:
>> +                            #  (see "package.use" in the portage(5) man 
>> page for more details)
>> +                            # # required by 
>> sci-mathematics/octave-4.2.2::test_repo
>> +                            # # required by sci-mathematics/octave 
>> (argument)
>> +                            # >=x11-libs/qscintilla-2.9.4 qt5
>> +                            #
>> +                            # !!! The ebuild selected to satisfy 
>> ">=x11-libs/qscintilla-2.9.3-r2:=[qt5(+)]" has unmet requirements.
>> +                            # - x11-libs/qscintilla-2.9.4::test_repo 
>> USE="qt4 -qt5"
>> +                            #
>> +                            #   The following REQUIRED_USE flag constraints 
>> are unsatisfied:
>> +                            #     exactly-one-of ( qt4 qt5 )
>> +                            #
>> +                            # (dependency required by 
>> "sci-mathematics/octave-4.2.2::test_repo" [ebuild])
>> +                            # (dependency required by 
>> "sci-mathematics/octave" [argument])
>>                              ResolverPlaygroundTestCase(
>>                                      ["sci-mathematics/octave"],
>>                                      options={"--autounmask": True},
>> -                                    use_changes=None,
>> +                                    
>> use_changes={"x11-libs/qscintilla-2.9.4": {"qt5": True}},
>>                                      success=False),
>>  
>>                              #Make sure we don't change masked/forced flags.
>> diff --git a/pym/portage/tests/resolver/test_slot_collisions.py 
>> b/pym/portage/tests/resolver/test_slot_collisions.py
>> index 9fcd5294a..430ccaad6 100644
>> --- a/pym/portage/tests/resolver/test_slot_collisions.py
>> +++ b/pym/portage/tests/resolver/test_slot_collisions.py
>> @@ -136,15 +136,19 @@ class SlotCollisionTestCase(TestCase):
>>                              slot_collision_solutions = [{"sci-libs/Q-1": 
>> {"foo": True}, "sci-libs/P-1": {"foo": True}}]
>>                              ),
>>  
>> -                    #Conflict with REQUIRED_USE
>> -                    ResolverPlaygroundTestCase(
>> -                            ["=app-misc/C-1", "=app-misc/B-1"],
>> -                            all_permutations = True,
>> -                            slot_collision_solutions = [],
>> -                            mergelist = ["app-misc/A-1", "app-misc/C-1", 
>> "app-misc/B-1"],
>> -                            ignore_mergelist_order = True,
>> -                            success = False),
>>                      )
>> +                    # NOTE: For this test case, ResolverPlaygroundTestCase 
>> attributes
>> +                    # vary randomly between runs, so it's expected to fail 
>> randomly.
>> +                    #Conflict with REQUIRED_USE
>> +                    #ResolverPlaygroundTestCase(
>> +                    #       ["=app-misc/C-1", "=app-misc/B-1"],
>> +                    #       all_permutations = True,
>> +                    #       slot_collision_solutions = None,
>> +                    #       use_changes={"app-misc/A-1": {"foo": True}},
>> +                    #       mergelist = ["app-misc/A-1", "app-misc/C-1", 
>> "app-misc/B-1"],
>> +                    #       ignore_mergelist_order = True,
>> +                    #       success = False),
>> +                    #)
>>  
>>              playground = ResolverPlayground(ebuilds=ebuilds, 
>> installed=installed)
>>              try:
> More [plain English] explanations of portage hiccups is always welcome!
> 
> Thanks Zac!

Thanks! Merged:

https://gitweb.gentoo.org/proj/portage.git/commit/?id=ce150da22e351a7ba52a6390b9cb7aa076c0c8ce
-- 
Thanks,
Zac

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to