Package: use _eapi_attrs
authorZac Medico <zmedico@gentoo.org>
Mon, 11 Jun 2012 00:58:14 +0000 (17:58 -0700)
committerZac Medico <zmedico@gentoo.org>
Mon, 11 Jun 2012 00:58:14 +0000 (17:58 -0700)
pym/_emerge/Package.py
pym/portage/eapi.py

index bdd4bc7d9969ead2654017adfe46d4c39e539276..75021b9f50e83a29f3496a0cd48be6f8aaeb43cd 100644 (file)
@@ -10,7 +10,7 @@ from portage.const import EBUILD_PHASES
 from portage.dep import Atom, check_required_use, use_reduce, \
        paren_enclose, _slot_re, _slot_separator, _repo_separator
 from portage.versions import _pkg_str, _unknown_repo
-from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
+from portage.eapi import _get_eapi_attrs
 from portage.exception import InvalidDependString
 from _emerge.Task import Task
 
@@ -49,6 +49,7 @@ class Package(Task):
                self.metadata = _PackageMetadataWrapper(self, self._raw_metadata)
                if not self.built:
                        self.metadata['CHOST'] = self.root_config.settings.get('CHOST', '')
+               eapi_attrs = _get_eapi_attrs(self.metadata["EAPI"])
                slot = self.slot
                if _slot_re.match(slot) is None:
                        self._invalid_metadata('SLOT.invalid',
@@ -62,7 +63,7 @@ class Package(Task):
                # sync metadata with validated repo (may be UNKNOWN_REPO)
                self.metadata['repository'] = self.cpv.repo
                if (self.iuse.enabled or self.iuse.disabled) and \
-                       not eapi_has_iuse_defaults(self.metadata["EAPI"]):
+                       not eapi_attrs.iuse_defaults:
                        if not self.installed:
                                self._invalid_metadata('EAPI.incompatible',
                                        "IUSE contains defaults, but EAPI doesn't allow them")
@@ -194,7 +195,7 @@ class Package(Task):
                k = 'REQUIRED_USE'
                v = self.metadata.get(k)
                if v:
-                       if not eapi_has_required_use(eapi):
+                       if not _get_eapi_attrs(eapi).required_use:
                                self._invalid_metadata('EAPI.incompatible',
                                        "REQUIRED_USE set, but EAPI='%s' doesn't allow it" % eapi)
                        else:
index ca8af9c5b35d183ffc3d47f1da43a70a22bc71d9..e36567d161d44ad67285516795fefbf8f28a8539 100644 (file)
@@ -64,7 +64,8 @@ def eapi_allows_dots_in_use_flags(eapi):
        return eapi in ("4-python",)
 
 _eapi_attrs = collections.namedtuple('_eapi_attrs',
-       'dots_in_PN dots_in_use_flags repo_deps slot_deps '
+       'dots_in_PN dots_in_use_flags iuse_defaults '
+       'repo_deps required_use slot_deps '
        'src_uri_arrows strong_blocks use_deps use_dep_defaults')
 
 _eapi_attrs_cache = {}
@@ -81,7 +82,9 @@ def _get_eapi_attrs(eapi):
        eapi_attrs = _eapi_attrs(
                dots_in_PN = (eapi is None or eapi_allows_dots_in_PN(eapi)),
                dots_in_use_flags = (eapi is None or eapi_allows_dots_in_use_flags(eapi)),
+               iuse_defaults = (eapi is None or eapi_has_iuse_defaults(eapi)),
                repo_deps = (eapi is None or eapi_has_repo_deps(eapi)),
+               required_use = (eapi is None or eapi_has_required_use(eapi)),
                slot_deps = (eapi is None or eapi_has_slot_deps(eapi)),
                src_uri_arrows = (eapi is None or eapi_has_src_uri_arrows(eapi)),
                strong_blocks = (eapi is None or eapi_has_strong_blocks(eapi)),