If --binpkg-respect-use=y is given explicitly, then it implies --autounmask-use=n, because these options naturally oppose eachother.
Bug: https://bugs.gentoo.org/773469 Signed-off-by: Zac Medico <zmed...@gentoo.org> --- lib/_emerge/create_depgraph_params.py | 22 ++++++++++----------- lib/portage/tests/resolver/test_useflags.py | 20 +++++++++++++------ man/emerge.1 | 11 +++++++---- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/lib/_emerge/create_depgraph_params.py b/lib/_emerge/create_depgraph_params.py index 25dd2a1b4..267600fb6 100644 --- a/lib/_emerge/create_depgraph_params.py +++ b/lib/_emerge/create_depgraph_params.py @@ -41,12 +41,22 @@ def create_depgraph_params(myopts, myaction): # binpkg_changed_deps: reject binary packages with outdated deps myparams = {"recurse" : True} + binpkg_respect_use = myopts.get("--binpkg-respect-use") + if binpkg_respect_use is not None: + myparams["binpkg_respect_use"] = binpkg_respect_use + elif "--usepkgonly" not in myopts: + # If --binpkg-respect-use is not explicitly specified, we enable + # the behavior automatically (like requested in bug #297549), as + # long as it doesn't strongly conflict with other options that + # have been specified. + myparams["binpkg_respect_use"] = "auto" + autounmask_keep_keywords = myopts.get("--autounmask-keep-keywords") autounmask_keep_masks = myopts.get("--autounmask-keep-masks") autounmask = myopts.get("--autounmask") autounmask_license = myopts.get('--autounmask-license', 'y' if autounmask is True else 'n') - autounmask_use = myopts.get('--autounmask-use') + autounmask_use = 'n' if myparams.get('binpkg_respect_use') == 'y' else myopts.get('--autounmask-use') if autounmask == 'n': autounmask = False else: @@ -153,16 +163,6 @@ def create_depgraph_params(myopts, myaction): '--update' in myopts: myparams['rebuilt_binaries'] = True - binpkg_respect_use = myopts.get('--binpkg-respect-use') - if binpkg_respect_use is not None: - myparams['binpkg_respect_use'] = binpkg_respect_use - elif '--usepkgonly' not in myopts: - # If --binpkg-respect-use is not explicitly specified, we enable - # the behavior automatically (like requested in bug #297549), as - # long as it doesn't strongly conflict with other options that - # have been specified. - myparams['binpkg_respect_use'] = 'auto' - binpkg_changed_deps = myopts.get('--binpkg-changed-deps') if binpkg_changed_deps is not None: myparams['binpkg_changed_deps'] = binpkg_changed_deps diff --git a/lib/portage/tests/resolver/test_useflags.py b/lib/portage/tests/resolver/test_useflags.py index d66da0866..b799e62ff 100644 --- a/lib/portage/tests/resolver/test_useflags.py +++ b/lib/portage/tests/resolver/test_useflags.py @@ -46,15 +46,23 @@ class UseFlagsTestCase(TestCase): success = True, mergelist = ["dev-libs/A-1"]), - # In the unit test case for bug 773469, the --autounmask-backtrack option - # is needed in order to trigger the --binpkg-respect-use=y behavior that - # appears confusingly similar to --binpkg-respect-use=n behavior. + # For bug 773469, we wanted --binpkg-respect-use=y to trigger a + # slot collision. Instead, a combination of default --autounmask-use + # combined with --autounmask-backtrack=y from EMERGE_DEFAULT_OPTS + # triggered this behavior which appeared confusingly similar to + #--binpkg-respect-use=n behavior. + #ResolverPlaygroundTestCase( + # ["dev-libs/C", "dev-libs/D"], + # options={"--usepkg": True, "--binpkg-respect-use": "y", "--autounmask-backtrack": "y"}, + # success=True, + # use_changes={"dev-libs/C-1": {"abi_x86_32": True}}, + # mergelist=["[binary]dev-libs/C-1", "[binary]dev-libs/D-1"], ResolverPlaygroundTestCase( ["dev-libs/C", "dev-libs/D"], options={"--usepkg": True, "--binpkg-respect-use": "y", "--autounmask-backtrack": "y"}, - success=True, - use_changes={"dev-libs/C-1": {"abi_x86_32": True}}, - mergelist=["[binary]dev-libs/C-1", "[binary]dev-libs/D-1"], + success=False, + slot_collision_solutions=[{"dev-libs/C-1": {"abi_x86_32": True}}], + mergelist=["dev-libs/C-1", "[binary]dev-libs/D-1"], ), #--binpkg-respect-use=n: use binpkgs with different use flags diff --git a/man/emerge.1 b/man/emerge.1 index d9efc74cf..fe13e2145 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -1,4 +1,4 @@ -.TH "EMERGE" "1" "Feb 2021" "Portage VERSION" "Portage" +.TH "EMERGE" "1" "Mar 2021" "Portage VERSION" "Portage" .SH "NAME" emerge \- Command\-line interface to the Portage system .SH "SYNOPSIS" @@ -417,7 +417,8 @@ Allow autounmask package.license changes. .TP .BR "\-\-autounmask\-use < y | n >" Allow autounmask package.use changes. This option is enabled by default -(either \fB\-\-autounmask=n\fR or \fB\-\-autounmask\-use=n\fR disables +(any of \fB\-\-autounmask=n\fR, \fB\-\-autounmask\-use=n\fR, +or \fB\-\-binpkg-\-respect\-use=y\fR disables it). The \fBEMERGE_DEFAULT_OPTS\fR variable may be used to disable this option by default in \fBmake.conf\fR(5). .TP @@ -447,8 +448,10 @@ dependencies is controlled by the \fB\-\-with\-bdeps\fR option. Tells emerge to ignore binary packages if their USE flags don't match the current configuration. In order to help avoid issues with resolving inconsistent USE flag settings, this option is -automatically enabled unless the \fB\-\-usepkgonly\fR option -is enabled. +automatically enabled unless the \fB\-\-usepkgonly\fB option +is enabled. If \fB\-\-binpkg\-respect\-use=y\fB is given explicitly, +then it implies \fB\-\-autounmask\-use=n\fB, because these options +naturally oppose eachother. .TP .BR "\-\-buildpkg [ y | n ]" ", " \-b Tells emerge to build binary packages for all ebuilds processed in -- 2.26.2