Zac Medico
2018-07-12 09:59:03 UTC
Account for repoman modifications of the portdbapi self.settings
reference, and treat all flags as valid for the empty profile
because it does not have any implicit IUSE settings.
Bug: https://bugs.gentoo.org/660982
---
pym/_emerge/Package.py | 5 ++++-
pym/portage/dbapi/__init__.py | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index a7ce00bc9..5f34f3d27 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -93,7 +93,10 @@ class Package(Task):
# sync metadata with validated repo (may be UNKNOWN_REPO)
self._metadata['repository'] = self.cpv.repo
- implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ if self.root_config.settings.local_config:
+ implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ else:
+ implicit_match = db._repoman_iuse_implicit_cnstr(self.cpv, self._metadata)
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
self.iuse = self._iuse(self, self._metadata["IUSE"].split(),
implicit_match, usealiases, self.eapi)
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index d320cc75f..61d301839 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -216,6 +216,22 @@ class dbapi(object):
yield cpv
+ def _repoman_iuse_implicit_cnstr(self, pkg, metadata):
+ """
+ In repoman's version of _iuse_implicit_cnstr, account for modifications
+ of the self.settings reference between calls, and treat all flags as
+ valid for the empty profile because it does not have any implicit IUSE
+ settings. See bug 660982.
+ """
+ eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
+ if eapi_attrs.iuse_effective:
+ iuse_implicit_match = lambda flag: (True if not self.settings.profile_path
+ else self.settings._iuse_effective_match(flag))
+ else:
+ iuse_implicit_match = lambda flag: (True if not self.settings.profile_path
+ else self.settings._iuse_implicit_match(flag))
+ return iuse_implicit_match
+
def _iuse_implicit_cnstr(self, pkg, metadata):
"""
Construct a callable that checks if a given USE flag should
reference, and treat all flags as valid for the empty profile
because it does not have any implicit IUSE settings.
Bug: https://bugs.gentoo.org/660982
---
pym/_emerge/Package.py | 5 ++++-
pym/portage/dbapi/__init__.py | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index a7ce00bc9..5f34f3d27 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -93,7 +93,10 @@ class Package(Task):
# sync metadata with validated repo (may be UNKNOWN_REPO)
self._metadata['repository'] = self.cpv.repo
- implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ if self.root_config.settings.local_config:
+ implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ else:
+ implicit_match = db._repoman_iuse_implicit_cnstr(self.cpv, self._metadata)
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
self.iuse = self._iuse(self, self._metadata["IUSE"].split(),
implicit_match, usealiases, self.eapi)
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index d320cc75f..61d301839 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -216,6 +216,22 @@ class dbapi(object):
yield cpv
+ def _repoman_iuse_implicit_cnstr(self, pkg, metadata):
+ """
+ In repoman's version of _iuse_implicit_cnstr, account for modifications
+ of the self.settings reference between calls, and treat all flags as
+ valid for the empty profile because it does not have any implicit IUSE
+ settings. See bug 660982.
+ """
+ eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
+ if eapi_attrs.iuse_effective:
+ iuse_implicit_match = lambda flag: (True if not self.settings.profile_path
+ else self.settings._iuse_effective_match(flag))
+ else:
+ iuse_implicit_match = lambda flag: (True if not self.settings.profile_path
+ else self.settings._iuse_implicit_match(flag))
+ return iuse_implicit_match
+
def _iuse_implicit_cnstr(self, pkg, metadata):
"""
Construct a callable that checks if a given USE flag should
--
2.13.6
2.13.6