[pacman-dev] [PATCH 1/3] makepkg: refactor archive compression for reusability

Eli Schwartz eschwartz at archlinux.org
Tue Oct 3 14:56:29 UTC 2017


On 09/14/2017 02:27 AM, Allan McRae wrote:
>> +# Wrapper around many stream compression formats, for use in the middle of a
>> +# pipeline. A tar archive is passed on stdin and compressed to stdout.
>> +compress_as() {
> 
> This should really make its way to libmakepkg in util/compress.sh.

I suppose I can do that, anything else that should go there or is it a
one-function library?

> I have also internal debated the name for a while.  compress_as() vs
> compress_to() vs compress().  I was slightly leaning to the last one...

I'm not really sure what to call it either. Worth noting though that
compress() will not work -- POSIX has a compress/decompress command for
handling *.Z which is in fact utilized in the function itself, so that
would be rather recursive if anyone tried to use PKGEXT=.pkg.tar.Z for
some outdated reason.

OTOH I cannot find a repository package to provide that currently (but
gzip does provide uncompress as a second copy of the `gunzip -d` wrapper
which is also installed as gunzip). Although the AUR package "ncompress"
appears to be the modern canonical source of a non-patented `compress`
implementation.

So it is essentially dead (or at least AUR) code.

(Gripe: why does this AUR package claim the license for a public
domain/unlicense'd codebase is "GPL".)

>> +	# $1: final archive filename extension for compression type detection
>> +
>> +	local ext="$1"
>> +
>> +	case "$ext" in
>> +		*tar.gz)  ${COMPRESSGZ[@]:-gzip -c -f -n} ;;
>> +		*tar.bz2) ${COMPRESSBZ2[@]:-bzip2 -c -f} ;;
>> +		*tar.xz)  ${COMPRESSXZ[@]:-xz -c -z -} ;;
>> +		*tar.lrz) ${COMPRESSLRZ[@]:-lrzip -q} ;;
>> +		*tar.lzo) ${COMPRESSLZO[@]:-lzop -q} ;;
>> +		*tar.Z)   ${COMPRESSZ[@]:-compress -c -f} ;;
> 
> Aside: we need to do something about all these COMPRESSFOO variables...
> Adding a new one to our example makepkg.conf with each new addition is
> not ideal.  Perhaps we can just document them in the man page but no
> have default entries in makepkg.conf?   Or is there a better way?

Well, the makepkg.conf is already rather duplicative of the effort which
goes into its manpage. But I don't think we add new compression methods
all that often. I don't really have a strong opinion on this.

> 
>> +		*tar)     cat ;;
>> +		*) warning "$(gettext "'%s' is not a valid archive extension.")" \
>> +			"$ext"; cat ;;
>> +	esac
>> +}
>> +

-- 
Eli Schwartz

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/pacman-dev/attachments/20171003/719993c3/attachment.asc>


More information about the pacman-dev mailing list