diff mbox

[pacman-dev] makepkg: fix regression which broke split pkgbase-debug package metadata

Message ID 20180601003124.18806-2-eschwartz@archlinux.org
State Changes Requested, archived
Headers show

Commit Message

Eli Schwartz June 1, 2018, 12:31 a.m. UTC
In commit 9e52a36794552b77ecf26f7f34b226d096978f1e the split package
metadata backup/restore was refactored to use declare, which actually
declares variables in a local scope when in a function. This did not
play nicely with debug packages, which unset most metadata variables,
thereby reverting to the global scope rather than resulting in unset
metadata.

Fix by explicitly marking the variables as global.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 scripts/makepkg.sh.in | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Allan McRae June 4, 2018, 11:47 a.m. UTC | #1
On 01/06/18 10:31, Eli Schwartz wrote:
> In commit 9e52a36794552b77ecf26f7f34b226d096978f1e the split package
> metadata backup/restore was refactored to use declare, which actually
> declares variables in a local scope when in a function. This did not
> play nicely with debug packages, which unset most metadata variables,
> thereby reverting to the global scope rather than resulting in unset
> metadata.
> 
> Fix by explicitly marking the variables as global.
> 

This requires bash-4.2.   We released pacman-5.1 with bash-4.1 as the
minimum required version.

This might work:

printf '%s\n' "printf -v \"$var\" \"${!var}\""


> Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
> ---
>  scripts/makepkg.sh.in | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 21737af8..fe3891ce 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1124,7 +1124,12 @@ 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"
> +		if [[ ${!var} ]]; then
> +			printf '%s\n' "declare -g $var"
> +			declare -p $var
> +		else
> +			printf '%s\n'  "unset $var"
> +		fi
>  	done
>  }
>  
>
diff mbox

Patch

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 21737af8..fe3891ce 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1124,7 +1124,12 @@  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"
+		if [[ ${!var} ]]; then
+			printf '%s\n' "declare -g $var"
+			declare -p $var
+		else
+			printf '%s\n'  "unset $var"
+		fi
 	done
 }