portage-2.2
-------------
-* Add support for a new EAPI="2_pre0" value that can be used in ebuilds when
- testing new features such as USE dependencies. This is an experimental EAPI
- that will not be supported after the final EAPI 2 is defined. For more
- information about experimental EAPI features, refer to the "Ebuild" chapter
- of the html documentation that is installed with portage.
+* Add support for a new EAPI="2" value. For more information about new EAPI
+ features, refer to the "Ebuild" chapter of the html documentation that is
+ installed with portage.
* Add PORTAGE_IONICE_COMMAND setting for make.conf which is called to adjust
IO priority on portage and it's subprocesses.
* Add link level dependency awareness to emerge --depclean and --prune actions
return False
if len(pkg.metadata["EPREFIX"].strip()) < len(pkgsettings["EPREFIX"]):
return False
- if not portage.eapi_is_supported(pkg.metadata["EAPI"]):
- return False
- if not pkg.installed and \
- pkgsettings._getMissingKeywords(pkg.cpv, pkg.metadata):
+ eapi = pkg.metadata["EAPI"]
+ if not portage.eapi_is_supported(eapi):
return False
+ if not pkg.installed:
+ if portage._eapi_is_deprecated(eapi):
+ return False
+ if pkgsettings._getMissingKeywords(pkg.cpv, pkg.metadata):
+ return False
if pkgsettings._getMaskAtom(pkg.cpv, pkg.metadata):
return False
if pkgsettings._getProfileMaskAtom(pkg.cpv, pkg.metadata):
blocker_atoms = []
for pkg in installed_pkgs:
for blocker_atom in blocker_cache[pkg.cpv].atoms:
- blocker_atom = blocker_atom[1:]
+ blocker_atom = blocker_atom.lstrip("!")
blocker_atoms.append(blocker_atom)
blocker_parents.add(blocker_atom, pkg)
show_invalid_depstring_notice(new_pkg, depstr, atoms)
assert False
- blocker_atoms = [atom[1:] for atom in atoms \
- if atom.startswith("!")]
+ blocker_atoms = [atom.lstrip("!") for atom in atoms \
+ if atom[:1] == "!"]
if blocker_atoms:
blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms)
for inst_pkg in installed_pkgs:
eerror(l, phase=mydo, key=mysettings.mycpv)
return rval
+_deprecated_eapis = frozenset(["2_pre3", "2_pre2", "2_pre1"])
+
+def _eapi_is_deprecated(eapi):
+ return eapi in _deprecated_eapis
+
def eapi_is_supported(eapi):
# PREFIX HACK/EXTENSION: in prefix we have "incompatible" ebuilds in
# an consistent manner; regardless what the EAPI of the main tree
eapi.remove(prop)
# now check if what's left is supported (can)
- properties = [ "2_pre3", "2_pre2", "2_pre1" ] # another clumpsy solution
+ properties = _deprecated_eapis[:] # another clumpsy solution
for i in range(portage.const.EAPI + 1):
properties.append(str(i))
eapi = eapi[1:]
if not eapi_is_supported(eapi):
return ["EAPI %s" % eapi]
+ elif _eapi_is_deprecated(eapi) and not installed:
+ return ["EAPI %s" % eapi]
egroups = settings.configdict["backupenv"].get(
"ACCEPT_KEYWORDS", "").split()
mygroups = mygroups.split()
import portage.gpg, portage.checksum
from portage import eclass_cache, auxdbkeys, doebuild, flatten, \
- listdir, dep_expand, eapi_is_supported, key_expand, dep_check
+ listdir, dep_expand, eapi_is_supported, key_expand, dep_check, \
+ _eapi_is_deprecated
import os, stat
from itertools import izip
writemsg("!!! %s\n" % str(e), noiselevel=-1)
del e
continue
- if not eapi_is_supported(metadata["EAPI"]):
+ eapi = metadata["EAPI"]
+ if not eapi_is_supported(eapi):
+ continue
+ if _eapi_is_deprecated(eapi):
continue
if self.mysettings._getMissingKeywords(mycpv, metadata):
continue