commit: 1e28ffdc2e9e9afd233b1908c065eed54d4f7759
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Sep 3 13:00:08 2021 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Sep 10 07:16:39 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=1e28ffdc
Switch internal metadata to key=value format
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
bin/ebuild.sh | 13 +++++++------
lib/_emerge/EbuildMetadataPhase.py | 15 +++++++++------
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"