diff mbox

[pacman-dev] Revert "makepkg: use the `declare` builtin when backing up variables to eval"

Message ID 20180619111149.11598-1-allan@archlinux.org
State Accepted, archived
Headers show

Commit Message

Allan McRae June 19, 2018, 11:11 a.m. UTC
This reverts commit 9e52a36794552b77ecf26f7f34b226d096978f1e.

The change to use declare for the split package metadata backup/restore
resulted in variables being declared at a local scope. When these variables
were unset (mostly noticed with debug packaging) this left the variable at
global scope defined.  The decided fix for this requires the use of
bash-4.2 features, which is greater than our current minimum version and so
is not suitable for a maint release.  Revert the change in the meantime.

Signed-off-by: Allan McRae <allan@archlinux.org>
 scripts/makepkg.sh.in | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
diff mbox


diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 32423262..d35dd62d 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1125,22 +1125,34 @@  check_build_status() {
 backup_package_variables() {
 	local var
 	for var in ${splitpkg_overrides[@]}; do
-		declare -p $var 2>/dev/null || printf '%s\n'  "unset $var"
+		local indirect="${var}_backup"
+		eval "${indirect}=(\"\${$var[@]}\")"
+	done
+restore_package_variables() {
+	local var
+	for var in ${splitpkg_overrides[@]}; do
+		local indirect="${var}_backup"
+		if [[ -n ${!indirect} ]]; then
+			eval "${var}=(\"\${$indirect[@]}\")"
+		else
+			unset ${var}
+		fi
 run_split_packaging() {
 	local pkgname_backup=("${pkgname[@]}")
-	local restore_package_variables
 	for pkgname in ${pkgname_backup[@]}; do
 		mkdir "$pkgdir"
-		restore_package_variables="$(backup_package_variables)"
+		backup_package_variables
 		run_package $pkgname
 		lint_package || exit $E_PACKAGE_FAILED
-		eval "$restore_package_variables"
+		restore_package_variables