commit: 8621aa9b29e74dabdb426363a96d12ec2e036a15 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Mon Mar 26 16:28:36 2018 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Wed Mar 28 05:49:03 2018 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=8621aa9b
Disallow package.provided in EAPI 7 Bug: https://bugs.gentoo.org/568884 Closes: https://github.com/mgorny/portage/issues/12 pym/portage/eapi.py | 4 ++++ pym/portage/package/ebuild/config.py | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pym/portage/eapi.py b/pym/portage/eapi.py index 5f0017b65..d91edcce4 100644 --- a/pym/portage/eapi.py +++ b/pym/portage/eapi.py @@ -104,6 +104,10 @@ def eapi_has_automatic_unpack_dependencies(eapi): def eapi_has_hdepend(eapi): return eapi in ("5-hdepend",) +def eapi_allows_package_provided(eapi): + return eapi in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi", + "5", "5-progress", "6") + def eapi_has_bdepend(eapi): return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi", "5", "5-progress", "6") diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py index 9d2b34a53..ef9ec3e88 100644 --- a/pym/portage/package/ebuild/config.py +++ b/pym/portage/package/ebuild/config.py @@ -38,8 +38,9 @@ from portage.const import CACHE_PATH, \ from portage.dbapi import dbapi from portage.dbapi.porttree import portdbapi from portage.dep import Atom, isvalidatom, match_from_list, use_reduce, _repo_separator, _slot_separator -from portage.eapi import eapi_exports_AA, eapi_exports_merge_type, \ - eapi_supports_prefix, eapi_exports_replace_vars, _get_eapi_attrs +from portage.eapi import (eapi_exports_AA, eapi_exports_merge_type, + eapi_supports_prefix, eapi_exports_replace_vars, _get_eapi_attrs, + eapi_allows_package_provided) from portage.env.loaders import KeyValuePairFileLoader from portage.exception import InvalidDependString, IsADirectory, \ PortageException @@ -800,10 +801,19 @@ class config(object): archlist = sorted(stack_lists(archlist, incremental=1)) self.configdict["conf"]["PORTAGE_ARCHLIST"] = " ".join(archlist) - pkgprovidedlines = [grabfile( - os.path.join(x.location, "package.provided"), - recursive=x.portage1_directories) - for x in profiles_complex] + pkgprovidedlines = [] + for x in profiles_complex: + provpath = os.path.join(x.location, "package.provided") + if os.path.exists(provpath): + if x.eapi is None or eapi_allows_package_provided(x.eapi): + pkgprovidedlines.append(grabfile(provpath, + recursive=x.portage1_directories)) + else: + # TODO: bail out? + writemsg((_("!!! package.provided not allowed in EAPI %s: ") + %x.eapi)+x.location+"\n", + noiselevel=-1) + pkgprovidedlines = stack_lists(pkgprovidedlines, incremental=1) has_invalid_data = False for x in range(len(pkgprovidedlines)-1, -1, -1):
