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:
parent
f054351e52
commit
9e52a36794
1 changed files with 4 additions and 16 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue