Add Package.eapi property.
authorZac Medico <zmedico@gentoo.org>
Sat, 17 Nov 2012 17:31:53 +0000 (09:31 -0800)
committerZac Medico <zmedico@gentoo.org>
Sat, 17 Nov 2012 17:31:53 +0000 (09:31 -0800)
12 files changed:
pym/_emerge/EbuildExecuter.py
pym/_emerge/FakeVartree.py
pym/_emerge/Package.py
pym/_emerge/Scheduler.py
pym/_emerge/depgraph.py
pym/_emerge/resolver/circular_dependency.py
pym/_emerge/resolver/output.py
pym/portage/dep/_slot_operator.py
pym/portage/dep/dep_check.py
pym/portage/package/ebuild/_config/UseManager.py
pym/portage/package/ebuild/doebuild.py
pym/repoman/checks.py

index fd663a41df6113c9a6fa1e042ebd83872c29893d..cfbc90d0fda9f726126d01b8bc057f428a642c13 100644 (file)
@@ -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:]
index 17c95ac0ce4d0805f38897860ec3bdc0caa088bc..f618b28686f31d402b0bc6ead95aef2cb2ccc29f 100644 (file)
@@ -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
index 1c1840836984f6411646bc8bbcf42937ced69fdc..4c47bca4d6c1809ecf26d54022cb36595d0a98b7 100644 (file)
@@ -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)
index 7c3451e69f7f4de07e34854a082848aa702c29ea..ff2938020f53ed33e4022ab22d5cafdc5147d59e 100644 (file)
@@ -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:
index dace4fc74b322a7d4f284ccfb57be1e937fd87ca..c97aa02b8683ac94a55b817c8dd29c850ab42c7e 100644 (file)
@@ -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)
index 5192d61e99c41b0056ae7026f3df8b9acddca6d5..76c7b3afb0565a7d220d3db517845dd4966c690d 100644 (file)
@@ -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):
index 130ba2d0ae3e6b0d020ca834d486302df3a3175f..85e1dd7b011b3a89d41c44f761a5f95a652ce3b8 100644 (file)
@@ -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:
index ae588626cf6e5bd5bfeda0d5172ad493cf2eb305..1fdf904a11e27f06d6e7f9adc6f7974eb8a3cf11 100644 (file)
@@ -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
index 6d1969e17874c74d02c497e53bd54a9314b56ff1..006e084df3996084eb5f66518e487f8dc0153f72 100644 (file)
@@ -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
index 93ec6209cf12512114a90f6d1133e9dc5d0c97ce..85380d3afd8264810ae6da3016163cbe2d006058 100644 (file)
@@ -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)
index be33f63ca8f31eba75558dd6cae8015cd02ca5e5..a1f27db9dc5aaf417990598f72da61b5e20460b3 100644 (file)
@@ -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" + \
index 240f2498ad9bca27731fb2971b4df2ec7fbd0db5..8b80214ef1dc22a08f8b060c1b5158323ff10bc1 100644 (file)
@@ -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)