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 <[email protected]>
---
 scripts/makepkg.sh.in | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index f0703d41..d6cb00da 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1111,34 +1111,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 || printf '%s\n'  "unset $var"
        done
 }
 
 run_split_packaging() {
        local pkgname_backup=("${pkgname[@]}")
+       local restore_package_variables
        for pkgname in ${pkgname_backup[@]}; do
                pkgdir="$pkgdirbase/$pkgname"
                mkdir "$pkgdir"
-               backup_package_variables
+               restore_package_variables="$(backup_package_variables)"
                run_package $pkgname
                tidy_install
                lint_package || exit $E_PACKAGE_FAILED
                create_package
-               restore_package_variables
+               eval "$restore_package_variables"
        done
        pkgname=("${pkgname_backup[@]}")
        create_debug_package
-- 
2.16.2

Reply via email to