makepkg: use the declare builtin when backing up variables to eval

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>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Eli Schwartz 2018-03-14 23:13:31 -04:00 committed by Allan McRae
parent f054351e52
commit 9e52a36794

View file

@ -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"
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