commit: cbe6f8cac95f5db7b35018a01c56dc3d9c76bb21
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Aug 20 21:54:14 2018 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug 20 22:13:59 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=cbe6f8ca
config: regenerate USE for conditional RESTRICT (bug 664104)
When the features USE state changes due to package.env settings,
regenerate USE for correct evaluation of conditional RESTRICT.
Fixes: 45986341a80c ("Support !test? conditionals in RESTRICT (bug 663278)")
Bug: https://bugs.gentoo.org/664104
lib/portage/package/ebuild/config.py | 39 ++++++++++++++++++------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/lib/portage/package/ebuild/config.py
b/lib/portage/package/ebuild/config.py
index 9fbf7e8fc..a68df5807 100644
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -1666,8 +1666,22 @@ class config(object):
has_changed = True
if has_changed:
+ # This can modify self.features due to package.env
settings.
self.reset(keeping_pkg=1)
+ if "test" in self.features:
+ # This is independent of IUSE and RESTRICT, so that the
same
+ # value can be shared between packages with different
settings,
+ # which is important when evaluating USE conditional
RESTRICT.
+ feature_use.append("test")
+
+ feature_use = " ".join(feature_use)
+ if feature_use != self.configdict["features"]["USE"]:
+ # Regenerate USE for evaluation of conditional RESTRICT.
+ self.configdict["features"]["USE"] = feature_use
+ self.reset(keeping_pkg=1)
+ has_changed = True
+
if explicit_iuse is None:
explicit_iuse = frozenset(x.lstrip("+-") for x in
iuse.split())
if eapi_attrs.iuse_effective:
@@ -1696,25 +1710,12 @@ class config(object):
else:
restrict_test = "test" in restrict
- pkginternaluse_before = pkginternaluse
- if "test" in self.features:
- # This is independent of IUSE and RESTRICT, so that the
same
- # value can be shared between packages with different
settings,
- # which is important when evaluating USE conditional
RESTRICT
- # above.
- feature_use.append("test")
-
- if restrict_test:
- # Handle it like IUSE="-test", since features
USE is
- # independent of RESTRICT.
- pkginternaluse_list.append("-test")
- pkginternaluse = " ".join(pkginternaluse_list)
- self.configdict["pkginternal"]["USE"] =
pkginternaluse
-
- feature_use = " ".join(feature_use)
- if (feature_use != self.configdict["features"].get("USE", "") or
- pkginternaluse is not pkginternaluse_before):
- self.configdict["features"]["USE"] = feature_use
+ if restrict_test and "test" in self.features:
+ # Handle it like IUSE="-test", since features USE is
+ # independent of RESTRICT.
+ pkginternaluse_list.append("-test")
+ pkginternaluse = " ".join(pkginternaluse_list)
+ self.configdict["pkginternal"]["USE"] = pkginternaluse
# TODO: can we avoid that?
self.reset(keeping_pkg=1)
has_changed = True