summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2021-09-03 15:00:08 +0200
committerMichał Górny <mgorny@gentoo.org>2021-09-10 09:16:39 +0200
commit1e28ffdc2e9e9afd233b1908c065eed54d4f7759 (patch)
tree2c589348103b02952d412c176e5bacf2c44f01fd
parentRemove deprecated dbkey support from doebuild/ebuild.sh (diff)
downloadportage-1e28ffdc2e9e9afd233b1908c065eed54d4f7759.tar.gz
portage-1e28ffdc2e9e9afd233b1908c065eed54d4f7759.tar.bz2
portage-1e28ffdc2e9e9afd233b1908c065eed54d4f7759.zip
Switch internal metadata to key=value format
Signed-off-by: Michał Górny <mgorny@gentoo.org>
-rwxr-xr-xbin/ebuild.sh13
-rw-r--r--lib/_emerge/EbuildMetadataPhase.py15
2 files changed, 16 insertions, 12 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 32995d95b..381bcb5c8 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -754,10 +754,11 @@ if [[ $EBUILD_PHASE = depend ]] ; then
export SANDBOX_ON="0"
set -f
- auxdbkeys="DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE
+ metadata_keys=(
+ DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE
DESCRIPTION KEYWORDS INHERITED IUSE REQUIRED_USE PDEPEND BDEPEND
- EAPI PROPERTIES DEFINED_PHASES IDEPEND UNUSED_04
- UNUSED_03 UNUSED_02 UNUSED_01"
+ EAPI PROPERTIES DEFINED_PHASES IDEPEND
+ )
if ! ___eapi_has_BDEPEND; then
unset BDEPEND
@@ -767,10 +768,10 @@ if [[ $EBUILD_PHASE = depend ]] ; then
fi
# The extra $(echo) commands remove newlines.
- for f in ${auxdbkeys} ; do
- eval "echo \$(echo \${!f}) 1>&${PORTAGE_PIPE_FD}" || exit $?
+ for f in "${metadata_keys[@]}" ; do
+ echo "${f}=$(echo ${!f})" >&${PORTAGE_PIPE_FD} || exit $?
done
- eval "exec ${PORTAGE_PIPE_FD}>&-"
+ exec {PORTAGE_PIPE_FD}>&-
set +f
else
# Note: readonly variables interfere with __preprocess_ebuild_env(), so
diff --git a/lib/_emerge/EbuildMetadataPhase.py b/lib/_emerge/EbuildMetadataPhase.py
index d00f194c2..5fd0e8a4d 100644
--- a/lib/_emerge/EbuildMetadataPhase.py
+++ b/lib/_emerge/EbuildMetadataPhase.py
@@ -151,13 +151,16 @@ class EbuildMetadataPhase(SubProcess):
metadata_lines = _unicode_decode(b''.join(self._raw_metadata),
encoding=_encodings['repo.content'],
errors='replace').splitlines()
+ metadata = {}
metadata_valid = True
- if len(portage.auxdbkeys) != len(metadata_lines):
- # Don't trust bash's returncode if the
- # number of lines is incorrect.
- metadata_valid = False
- else:
- metadata = dict(zip(portage.auxdbkeys, metadata_lines))
+ for l in metadata_lines:
+ if '=' not in l:
+ metadata_valid = False
+ break
+ key, value = l.split('=', 1)
+ metadata[key] = value
+
+ if metadata_valid:
parsed_eapi = self._eapi
if parsed_eapi is None:
parsed_eapi = "0"