diff mbox

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

Message ID 20180315031331.20072-1-eschwartz@archlinux.org
State Accepted, archived
Headers show

Commit Message

Eli Schwartz March 15, 2018, 3:13 a.m. UTC
Rather than manually crafting foo_backup in a loop and eval'ing them
with a complicated escape pattern, store every splitpkg_overrides
element into a single variable via the eval-friendly `declare` builtin.

An alternative to eval would be using `printf -v` but this does not work
for arrays.

This has the additional benefit of reducing the number of
variables/arrays floating around in the environment.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>

v2: squelch error messages.

My apologies -- that was inexcusable. This was originally inspired by
the patch "makepkg: reorganize the restoration of settings by precedence"
which did the same thing correctly...

 scripts/makepkg.sh.in | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)
diff mbox


diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 96a96483..bc2d0061 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1115,34 +1115,22 @@  check_build_status() {
 backup_package_variables() {
 	local var
 	for var in ${splitpkg_overrides[@]}; do
-		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
+		declare -p $var 2>/dev/null || printf '%s\n'  "unset $var"
 run_split_packaging() {
 	local pkgname_backup=("${pkgname[@]}")
+	local restore_package_variables
 	for pkgname in ${pkgname_backup[@]}; do
 		mkdir "$pkgdir"
-		backup_package_variables
+		restore_package_variables="$(backup_package_variables)"
 		run_package $pkgname
 		lint_package || exit $E_PACKAGE_FAILED
-		restore_package_variables
+		eval "$restore_package_variables"