From 8f23cb8f32f8499575dc0629a8a83ddcf963d3c8 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 17 Nov 2012 09:31:53 -0800 Subject: Add Package.eapi property. --- pym/_emerge/EbuildExecuter.py | 2 +- pym/_emerge/FakeVartree.py | 2 +- pym/_emerge/Package.py | 14 ++++++--- pym/_emerge/Scheduler.py | 2 +- pym/_emerge/depgraph.py | 40 ++++++++++++------------ pym/_emerge/resolver/circular_dependency.py | 6 ++-- pym/_emerge/resolver/output.py | 2 +- pym/portage/dep/_slot_operator.py | 2 +- pym/portage/dep/dep_check.py | 2 +- pym/portage/package/ebuild/_config/UseManager.py | 2 +- pym/portage/package/ebuild/doebuild.py | 4 +-- pym/repoman/checks.py | 4 +-- 12 files changed, 43 insertions(+), 39 deletions(-) diff --git a/pym/_emerge/EbuildExecuter.py b/pym/_emerge/EbuildExecuter.py index fd663a41d..cfbc90d0f 100644 --- a/pym/_emerge/EbuildExecuter.py +++ b/pym/_emerge/EbuildExecuter.py @@ -83,7 +83,7 @@ class EbuildExecuter(CompositeTask): pkg = self.pkg phases = self._phases - eapi = pkg.metadata["EAPI"] + eapi = pkg.eapi if not eapi_has_src_prepare_and_src_configure(eapi): # skip src_prepare and src_configure phases = phases[2:] diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py index 17c95ac0c..f618b2868 100644 --- a/pym/_emerge/FakeVartree.py +++ b/pym/_emerge/FakeVartree.py @@ -110,7 +110,7 @@ class FakeVartree(vartree): # We need to check the EAPI, and this also raises # a KeyError to the caller if appropriate. pkg_obj = self.dbapi._cpv_map[pkg] - installed_eapi = pkg_obj.metadata['EAPI'] + installed_eapi = pkg_obj.eapi repo = pkg_obj.metadata['repository'] eapi_attrs = _get_eapi_attrs(installed_eapi) built_slot_operator_atoms = None diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py index 1c1840836..4c47bca4d 100644 --- a/pym/_emerge/Package.py +++ b/pym/_emerge/Package.py @@ -56,7 +56,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"]) + 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'): @@ -78,7 +78,7 @@ class Package(Task): 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: @@ -101,6 +101,10 @@ class Package(Task): 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): @@ -185,7 +189,7 @@ class Package(Task): 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: @@ -286,7 +290,7 @@ class Package(Task): 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): @@ -472,7 +476,7 @@ class Package(Task): 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) diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index 7c3451e69..ff2938020 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -783,7 +783,7 @@ class Scheduler(PollScheduler): if x.operation == "uninstall": continue - if x.metadata["EAPI"] in ("0", "1", "2", "3"): + if x.eapi in ("0", "1", "2", "3"): continue if "pretend" not in x.metadata.defined_phases: diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index dace4fc74..c97aa02b8 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -1232,7 +1232,7 @@ class depgraph(object): 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( @@ -1344,7 +1344,7 @@ class depgraph(object): # 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 @@ -1491,12 +1491,12 @@ class depgraph(object): # 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)) @@ -1684,7 +1684,7 @@ class depgraph(object): 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: @@ -1776,7 +1776,7 @@ class depgraph(object): 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 @@ -1790,7 +1790,7 @@ class depgraph(object): 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 @@ -2940,7 +2940,7 @@ class depgraph(object): 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, @@ -3140,7 +3140,7 @@ class depgraph(object): 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 @@ -3233,7 +3233,7 @@ class depgraph(object): 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 @@ -3418,12 +3418,12 @@ class depgraph(object): 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) @@ -3483,9 +3483,9 @@ class depgraph(object): 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)) @@ -3535,10 +3535,10 @@ class depgraph(object): 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)) @@ -3628,7 +3628,7 @@ class depgraph(object): 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) @@ -4194,9 +4194,9 @@ class depgraph(object): #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 \ @@ -5058,7 +5058,7 @@ class depgraph(object): 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) diff --git a/pym/_emerge/resolver/circular_dependency.py b/pym/_emerge/resolver/circular_dependency.py index 5192d61e9..76c7b3afb 100644 --- a/pym/_emerge/resolver/circular_dependency.py +++ b/pym/_emerge/resolver/circular_dependency.py @@ -127,7 +127,7 @@ class circular_dependency_handler(object): try: affecting_use = extract_affecting_use(dep, parent_atom, - eapi=parent.metadata["EAPI"]) + eapi=parent.eapi) except InvalidDependString: if not parent.installed: raise @@ -147,7 +147,7 @@ class circular_dependency_handler(object): #other flags in REQUIRED_USE to affecting_use, to not lose any solution. required_use_flags = get_required_use_flags( parent.metadata.get("REQUIRED_USE", ""), - eapi=parent.metadata["EAPI"]) + eapi=parent.eapi) if affecting_use.intersection(required_use_flags): # TODO: Find out exactly which REQUIRED_USE flags are @@ -193,7 +193,7 @@ class circular_dependency_handler(object): if check_required_use(required_use, current_use, parent.iuse.is_valid_flag, - eapi=parent.metadata["EAPI"]): + eapi=parent.eapi): use = self.depgraph._pkg_use_enabled(parent) solution = set() for flag, state in zip(affecting_use, use_state): diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py index 130ba2d0a..85e1dd7b0 100644 --- a/pym/_emerge/resolver/output.py +++ b/pym/_emerge/resolver/output.py @@ -249,7 +249,7 @@ class Display(object): use_expand = sorted(self.use_expand) use_expand.insert(0, "USE") - feature_flags = _get_feature_flags(_get_eapi_attrs(pkg.metadata["EAPI"])) + feature_flags = _get_feature_flags(_get_eapi_attrs(pkg.eapi)) for key in use_expand: if key in self.use_expand_hidden: diff --git a/pym/portage/dep/_slot_operator.py b/pym/portage/dep/_slot_operator.py index ae588626c..1fdf904a1 100644 --- a/pym/portage/dep/_slot_operator.py +++ b/pym/portage/dep/_slot_operator.py @@ -10,7 +10,7 @@ def find_built_slot_operator_atoms(pkg): atoms = {} for k in Package._dep_keys: atom_list = list(_find_built_slot_operator(use_reduce(pkg.metadata[k], - uselist=pkg.use.enabled, eapi=pkg.metadata['EAPI'], + uselist=pkg.use.enabled, eapi=pkg.eapi, token_class=Atom))) if atom_list: atoms[k] = atom_list diff --git a/pym/portage/dep/dep_check.py b/pym/portage/dep/dep_check.py index 6d1969e17..006e084df 100644 --- a/pym/portage/dep/dep_check.py +++ b/pym/portage/dep/dep_check.py @@ -595,7 +595,7 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None, # dependencies so that things like --depclean work as well as possible # in spite of partial invalidity. if not current_parent.installed: - eapi = current_parent.metadata['EAPI'] + eapi = current_parent.eapi if isinstance(depstring, list): mysplit = depstring diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py index 93ec6209c..85380d3af 100644 --- a/pym/portage/package/ebuild/_config/UseManager.py +++ b/pym/portage/package/ebuild/_config/UseManager.py @@ -397,7 +397,7 @@ class UseManager(object): return frozenset(stack_lists(useforce, incremental=True)) def getUseAliases(self, pkg): - if not eapi_has_use_aliases(pkg.metadata["EAPI"]): + if not eapi_has_use_aliases(pkg.eapi): return {} cp = getattr(pkg, "cp", None) diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index be33f63ca..a1f27db9d 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -1335,9 +1335,9 @@ def _validate_deps(mysettings, myroot, mydo, mydbapi): if not pkg.built and \ mydo not in ("digest", "help", "manifest") and \ pkg.metadata["REQUIRED_USE"] and \ - eapi_has_required_use(pkg.metadata["EAPI"]): + eapi_has_required_use(pkg.eapi): result = check_required_use(pkg.metadata["REQUIRED_USE"], - pkg.use.enabled, pkg.iuse.is_valid_flag, eapi=pkg.metadata["EAPI"]) + pkg.use.enabled, pkg.iuse.is_valid_flag, eapi=pkg.eapi) if not result: reduced_noise = result.tounicode() writemsg("\n %s\n" % _("The following REQUIRED_USE flag" + \ diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py index 240f2498a..8b80214ef 100644 --- a/pym/repoman/checks.py +++ b/pym/repoman/checks.py @@ -288,7 +288,7 @@ class EapiDefinition(LineCheck): _eapi_re = portage._pms_eapi_re def new(self, pkg): - self._cached_eapi = pkg.metadata['EAPI'] + self._cached_eapi = pkg.eapi self._parsed_eapi = None self._eapi_line_num = None @@ -879,7 +879,7 @@ def run_checks(contents, pkg): for lc in checks: if is_comment and lc.ignore_comment: continue - if lc.check_eapi(pkg.metadata['EAPI']): + if lc.check_eapi(pkg.eapi): ignore = lc.ignore_line if not ignore or not ignore.match(line): e = lc.check(num, line) -- cgit v1.2.3-1-g7c22