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"])
+ eapi_attrs = _get_eapi_attrs(self.eapi)
self.cpv = _pkg_str(self.cpv, metadata=self.metadata,
settings=self.root_config.settings)
if hasattr(self.cpv, 'slot_invalid'):
implicit_match = self.root_config.settings._iuse_implicit_match
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
self.iuse = self._iuse(self, self.metadata["IUSE"].split(), implicit_match,
- usealiases, self.metadata["EAPI"])
+ usealiases, self.eapi)
if (self.iuse.enabled or self.iuse.disabled) and \
not eapi_attrs.iuse_defaults:
type_name=self.type_name)
self._hash_value = hash(self._hash_key)
+ @property
+ def eapi(self):
+ return self.metadata["EAPI"]
+
# For consistency with _pkg_str
@property
def _metadata(self):
is expensive for ebuilds and therefore we want to avoid doing
in unnecessarily (like for masked packages).
"""
- eapi = self.metadata['EAPI']
+ eapi = self.eapi
dep_eapi = eapi
dep_valid_flag = self.iuse.is_valid_flag
if self.installed:
if not settings._accept_chost(self.cpv, self.metadata):
masks['CHOST'] = self.metadata['CHOST']
- eapi = self.metadata["EAPI"]
+ eapi = self.eapi
if not portage.eapi_is_supported(eapi):
masks['EAPI.unsupported'] = eapi
if portage._eapi_is_deprecated(eapi):
self._force = None
self._mask = None
enabled_flags = use_str.split()
- if eapi_has_use_aliases(pkg.metadata["EAPI"]):
+ if eapi_has_use_aliases(pkg.eapi):
for enabled_flag in enabled_flags:
enabled_flags.extend(pkg.iuse.alias_mapping.get(enabled_flag, []))
self.enabled = frozenset(enabled_flags)
newuse = "--newuse" in self._frozen_config.myopts
changed_use = "changed-use" == self._frozen_config.myopts.get("--reinstall")
feature_flags = _get_feature_flags(
- _get_eapi_attrs(pkg.metadata["EAPI"]))
+ _get_eapi_attrs(pkg.eapi))
if newuse or (binpkg_respect_use and not changed_use):
flags = set(orig_iuse.symmetric_difference(
# The blocker applies to the root where
# the parent is or will be installed.
blocker = Blocker(atom=dep.atom,
- eapi=dep.parent.metadata["EAPI"],
+ eapi=dep.parent.eapi,
priority=dep.priority, root=dep.parent.root)
self._dynamic_config._blocker_parents.add(blocker, dep.parent)
return 1
# for USE adjustment rather than have REQUIRED_USE
# affect package selection and || dep choices.
if not pkg.built and pkg.metadata.get("REQUIRED_USE") and \
- eapi_has_required_use(pkg.metadata["EAPI"]):
+ eapi_has_required_use(pkg.eapi):
required_use_is_sat = check_required_use(
pkg.metadata["REQUIRED_USE"],
self._pkg_use_enabled(pkg),
pkg.iuse.is_valid_flag,
- eapi=pkg.metadata["EAPI"])
+ eapi=pkg.eapi)
if not required_use_is_sat:
if dep.atom is not None and dep.parent is not None:
self._add_parent_atom(pkg, (dep.parent, dep.atom))
myroot = pkg.root
metadata = pkg.metadata
removal_action = "remove" in self._dynamic_config.myparams
- eapi_attrs = _get_eapi_attrs(pkg.metadata["EAPI"])
+ eapi_attrs = _get_eapi_attrs(pkg.eapi)
edepend={}
for k in Package._dep_keys:
uselist=self._pkg_use_enabled(pkg),
is_valid_flag=pkg.iuse.is_valid_flag,
opconvert=True, token_class=Atom,
- eapi=pkg.metadata['EAPI'])
+ eapi=pkg.eapi)
except portage.exception.InvalidDependString as e:
if not pkg.installed:
# should have been masked before it was selected
dep_string = portage.dep.use_reduce(dep_string,
uselist=self._pkg_use_enabled(pkg),
opconvert=True, token_class=Atom,
- eapi=pkg.metadata['EAPI'])
+ eapi=pkg.eapi)
except portage.exception.InvalidDependString as e:
self._dynamic_config._masked_installed.add(pkg)
del e
eapi = None
is_valid_flag = None
if parent is not None:
- eapi = parent.metadata['EAPI']
+ eapi = parent.eapi
if not parent.installed:
is_valid_flag = parent.iuse.is_valid_flag
depstring = portage.dep.use_reduce(depstring,
try:
affecting_use.update(extract_affecting_use(
node.metadata[dep_str], target_atom,
- eapi=node.metadata["EAPI"]))
+ eapi=node.eapi))
except InvalidDependString:
if not node.installed:
raise
for dep_str in dep_strings:
try:
affecting_use.update(extract_affecting_use(
- dep_str, atom, eapi=node.metadata["EAPI"]))
+ dep_str, atom, eapi=node.eapi))
except InvalidDependString:
if not node.installed:
raise
if not mreasons and \
not pkg.built and \
pkg.metadata.get("REQUIRED_USE") and \
- eapi_has_required_use(pkg.metadata["EAPI"]):
+ eapi_has_required_use(pkg.eapi):
if not check_required_use(
pkg.metadata["REQUIRED_USE"],
self._pkg_use_enabled(pkg),
pkg.iuse.is_valid_flag,
- eapi=pkg.metadata["EAPI"]):
+ eapi=pkg.eapi):
required_use_unsatisfied.append(pkg)
continue
root_slot = (pkg.root, pkg.slot_atom)
for flag in need_disable:
new_use.discard(flag)
if check_required_use(required_use, old_use,
- pkg.iuse.is_valid_flag, eapi=pkg.metadata["EAPI"]) \
+ pkg.iuse.is_valid_flag, eapi=pkg.eapi) \
and not check_required_use(required_use, new_use,
- pkg.iuse.is_valid_flag, eapi=pkg.metadata["EAPI"]):
+ pkg.iuse.is_valid_flag, eapi=pkg.eapi):
required_use_warning = ", this change violates use flag constraints " + \
"defined by %s: '%s'" % (pkg.cpv, human_readable_required_use(required_use))
new_use.add(flag)
if check_required_use(required_use, old_use,
myparent.iuse.is_valid_flag,
- eapi=myparent.metadata["EAPI"]) and \
+ eapi=myparent.eapi) and \
not check_required_use(required_use, new_use,
myparent.iuse.is_valid_flag,
- eapi=myparent.metadata["EAPI"]):
+ eapi=myparent.eapi):
required_use_warning = ", this change violates use flag constraints " + \
"defined by %s: '%s'" % (myparent.cpv, \
human_readable_required_use(required_use))
pkg.metadata["REQUIRED_USE"],
self._pkg_use_enabled(pkg),
pkg.iuse.is_valid_flag,
- eapi=pkg.metadata["EAPI"]).tounicode()
+ eapi=pkg.eapi).tounicode()
writemsg(" %s\n" % \
human_readable_required_use(reduced_noise),
noiselevel=-1)
#Don't do the change if it violates REQUIRED_USE.
required_use = pkg.metadata.get("REQUIRED_USE")
if required_use and check_required_use(required_use, old_use,
- pkg.iuse.is_valid_flag, eapi=pkg.metadata["EAPI"]) and \
+ pkg.iuse.is_valid_flag, eapi=pkg.eapi) and \
not check_required_use(required_use, new_use,
- pkg.iuse.is_valid_flag, eapi=pkg.metadata["EAPI"]):
+ pkg.iuse.is_valid_flag, eapi=pkg.eapi):
return old_use
if any(x in pkg.use.mask for x in new_changes) or \
try:
for atom in blocker_atoms:
blocker = Blocker(atom=atom,
- eapi=pkg.metadata["EAPI"],
+ eapi=pkg.eapi,
priority=self._priority(runtime=True),
root=myroot)
self._dynamic_config._blocker_parents.add(blocker, pkg)