[pacman-dev] [PATCH 2/2] makepkg: always keep sources symlinks

Allan McRae allan at archlinux.org
Wed Aug 5 08:48:16 EDT 2009


Cedric Staniewski wrote:
> This time a more tested patch...
> Probably someone knows a possibility to quote the file name in the cmd
> string so that the characters are recognized as quoting chars and not as
> part of the filename without using eval.
>
>
> >From 0aad0c6f6030806cea1804152afc0650d491b307 Mon Sep 17 00:00:00 2001
> From: Cedric Staniewski <cedric at gmx.ca>
> Date: Wed, 5 Aug 2009 12:43:03 +0200
> Subject: [PATCH] makepkg: always keep sources symlinks
>
> Add -k (keep) option to the bunzip2/xz commands and make gunzip
> decompressing to stdout, because it does not offer something like a
> -k option.
>
> Additionally the selection of the decompression command for
> gzip/bzip2/xz compressed files now also depends on the file suffix,
> since the decompression programs rely on them when not using -c
> option.
>
> Signed-off-by: Cedric Staniewski <cedric at gmx.ca>
> ---
>  scripts/makepkg.sh.in |   36 ++++++++++++++++++++++++------------
>  1 files changed, 24 insertions(+), 12 deletions(-)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 56ad2c0..c7a6434 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -644,22 +644,34 @@ extract_sources() {
>  		local cmd=''
>  		case "$file_type" in
>  			*application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*)
> -				cmd="bsdtar -x -f" ;;
> -			*application/x-gzip*)
> -				cmd="gunzip -d -f" ;;
> -			*application/x-bzip*)
> -				cmd="bunzip2 -f" ;;
> -			*application/x-xz*)
> -				cmd="xz -d -f" ;;
> +				cmd="bsdtar xf '$file'" ;;
>  			*)
> -				# Don't know what to use to extract this file,
> -				# skip to the next file
> -				continue;;
> +				case "$file" in
> +					*.gz|*.z|*.Z)
> +						[[ "$file_type" = *application/x-gzip* ]] \
> +							&& cmd="gunzip -cf '$file' > '${file%.*}'" \
> +							|| continue
> +						;;
> +					*.bz2|*.bz)
> +						[[ "$file_type" = *application/x-bzip* ]] \
> +							&& cmd="bunzip2 -fk '$file'" \
> +							|| continue
> +						;;
> +					*.xz)
> +						[[ "$file_type" = *application/x-xz* ]] \
> +							&& cmd="xz -dfk '$file'" \
> +							|| continue
> +						;;
> +					*)
> +						# Don't know what to use to extract this file,
> +						# skip to the next file
> +						continue ;;
> +				esac
>  		esac
>  
>  		local ret=0
> -		msg2 '%s' "$cmd \"$file\""
> -		$cmd "$file" || ret=$?
> +		msg2 '%s' "$cmd"
> +		eval $cmd || ret=$?
>  		if [ $ret -ne 0 ]; then
>  			error "$(gettext "Failed to extract %s")" "$file"
>  			plain "$(gettext "Aborting...")"
>   

I'd really prefer this whole thing to look like:


ext=${file/*./}

case "$file_type" in
	*application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*)
		cmd="bsdtar xf '$file'" ;;
	*application/x-gzip*)
		[ "$ext" == ".gz" -o "$ext" == ".z" -o "$ext" == ".Z" ] && cmd="gunzip -d -f '$file'
 

or something like that...  it is much cleaner.

Allan







More information about the pacman-dev mailing list