From 6a6cfc012bff779d694ffbad4cba1022c8829a32 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Thu, 23 Jan 2014 20:14:11 +0100 Subject: Add uncompressed and xz control.tar deb member support These are currently not accepted by the Debian archive, but are supported since dpkg 1.17.6, and they do not incur any additional dependency from the host system. This is mostly for completeness' sake, as Debian base packages with uncompressed or xz control.tar members are probably not going to be used at all. --- functions | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/functions b/functions index 8fc0bee..0d48390 100644 --- a/functions +++ b/functions @@ -805,10 +805,22 @@ extract_dpkg_deb_data () { extract_ar_deb_field () { local pkg="$1" local field="$2" + local tarball=$(ar -t "$pkg" | grep "^control\.tar") - ar -p "$pkg" control.tar.gz | zcat | - tar -O -xf - control ./control 2>/dev/null | - grep -i "^$field:" | sed -e 's/[^:]*: *//' | head -n 1 + case "$tarball" in + control.tar.gz) cat_cmd=zcat ;; + control.tar.xz) cat_cmd=xzcat ;; + control.tar) cat_cmd=cat ;; + *) error 1 UNKNOWNCONTROLCOMP "Unknown compression type for %s in %s" "$tarball" "$pkg" ;; + esac + + if type $cat_cmd >/dev/null 2>&1; then + ar -p "$pkg" "$tarball" | $cat_cmd | + tar -O -xf - control ./control 2>/dev/null | + grep -i "^$field:" | sed -e 's/[^:]*: *//' | head -n 1 + else + error 1 UNPACKCMDUNVL "Extracting %s requires the %s command, which is not available" "$pkg" "$cat_cmd" + fi } extract_ar_deb_data () { -- cgit v0.12