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):

Reply via email to