wok rev 5209

xarchive: fix double suffix case (.tar.gz)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Apr 02 20:56:18 2010 +0200 (2010-04-02)
parents 5870b9a92261
children 158c8f134538
files xarchive/stuff/slitaz-wrap.sh
line diff
     1.1 --- a/xarchive/stuff/slitaz-wrap.sh	Fri Apr 02 13:24:21 2010 +0000
     1.2 +++ b/xarchive/stuff/slitaz-wrap.sh	Fri Apr 02 20:56:18 2010 +0200
     1.3 @@ -61,9 +61,16 @@
     1.4  # the shifting will leave the files passed as all the remaining args "$@"
     1.5  opt="$1"
     1.6  archive="$2"
     1.7 -lc_ext="$(echo ${2##*.} |tr [:upper:] [:lower:])"
     1.8 +lc="$(echo $2|tr [:upper:] [:lower:])"
     1.9  shift 2
    1.10  
    1.11 +in_exts()
    1.12 +{
    1.13 +for i in $@; do
    1.14 +	[ $(expr "$lc" : ".*\."$i"$") -gt 0 ] && break
    1.15 +done
    1.16 +}
    1.17 +
    1.18  tazpkg2cpio()
    1.19  {
    1.20  tmp="$(mktemp -d -t tmpcpio.XXXXXX)"
    1.21 @@ -83,13 +90,12 @@
    1.22  DECOMPRESS="cat"
    1.23  COMPRESS="cat"
    1.24  while read d c exts; do
    1.25 -	case " $exts " in *\ $lc_ext\ *)
    1.26 -		[ "$d" == "${d% *}" -o "$(which ${d% *})" ] || exit $UNSUPPORTED
    1.27 -		DECOMPRESS="$d"
    1.28 -		COMPRESS="$c"
    1.29 -		[ "$(which ${c% *})" ] || COMPRESS="false"
    1.30 -		break
    1.31 -	esac
    1.32 +	in_exts $exts || continue
    1.33 +	[ "$d" == "${d% *}" -o "$(which ${d% *})" ] || exit $UNSUPPORTED
    1.34 +	DECOMPRESS="$d"
    1.35 +	COMPRESS="$c"
    1.36 +	[ "$(which ${c% *})" ] || COMPRESS="false"
    1.37 +	break
    1.38  done <<EOT
    1.39  unlzma\ -c		lzma\ e\ -si\ -so	$LZMA_EXTS
    1.40  bunzip2\ -c		bzip2\ -c		$BZIP2_EXTS
    1.41 @@ -123,11 +129,6 @@
    1.42  exit $status
    1.43  }
    1.44  
    1.45 -not_busybox()
    1.46 -{
    1.47 -[ "$(basename $(readlink $(which $1)))" != "busybox" ]
    1.48 -}
    1.49 -
    1.50  addcpio()
    1.51  {
    1.52  find $@ | cpio -o -H newc
    1.53 @@ -155,10 +156,9 @@
    1.54  shift
    1.55  tmp="$(mktemp -d -t fstmp.XXXXXX)"
    1.56  while read command umnt exts; do
    1.57 -	case " $exts " in *\ $lc_ext\ *)
    1.58 -		$command "$archive" $tmp
    1.59 -		break
    1.60 -	esac
    1.61 +	in_exts $exts || continue
    1.62 +	$command "$archive" $tmp
    1.63 +	break
    1.64  done <<EOT
    1.65  cromfs-driver			fusermount\ -u	$CROMFS_EXTS
    1.66  mount\ -o\ loop=/dev/cloop,ro	umount\ -d	$CLOOP_EXTS
    1.67 @@ -191,44 +191,42 @@
    1.68  action=$1
    1.69  shift
    1.70  tardir="$(dirname "$archive")"
    1.71 -if not_busybox tar && [ "$action" != "-n" ]; then
    1.72 -	case " $TAR_EXTS $XZ_EXTS $LRZIP_EXTS " in *\ $lc_ext\ *)
    1.73 -		decompress_func
    1.74 -		case "$action" in
    1.75 -		-r)	tar --delete -f "$archive" "$@";;
    1.76 -		-a)	cd "$tardir"
    1.77 -			while [ -n "$1" ]; do
    1.78 -				tar -rf "$archive" "${1#$tardir/}"
    1.79 -			done
    1.80 -		esac
    1.81 -		compress_func
    1.82 +if [ "$(readlink /bin/tar)" != "busybox" ] && [ "$action" != "-n" ] && 
    1.83 +   in_exts $TAR_EXTS $XZ_EXTS $LRZIP_EXTS ; then
    1.84 +	decompress_func
    1.85 +	case "$action" in
    1.86 +	-r)	tar --delete -f "$archive" "$@";;
    1.87 +	-a)	cd "$tardir"
    1.88 +		while [ -n "$1" ]; do
    1.89 +			tar -rf "$archive" "${1#$tardir/}"
    1.90 +		done
    1.91  	esac
    1.92 +	compress_func
    1.93  fi
    1.94  while read add extract exts; do
    1.95 -	case " $exts " in *\ $lc_ext\ *)
    1.96 -		if [ "$action" = "-n" ]; then
    1.97 -			decompress_func
    1.98 -			cd "$tardir"
    1.99 -			$add "${1#$tardir/}" > "$archive"
   1.100 -			compress_func
   1.101 -		fi
   1.102 -		tmp="$(mktemp -d -t tartmp.XXXXXX)"
   1.103 -		cd $tmp
   1.104 -		$DECOMPRESS "$archive" | $extract
   1.105 +	in_exts $exts || continue
   1.106 +	if [ "$action" = "-n" ]; then
   1.107 +		decompress_func
   1.108 +		cd "$tardir"
   1.109 +		$add "${1#$tardir/}" > "$archive"
   1.110 +		compress_func
   1.111 +	fi
   1.112 +	tmp="$(mktemp -d -t tartmp.XXXXXX)"
   1.113 +	cd $tmp
   1.114 +	$DECOMPRESS "$archive" | $extract
   1.115 +	status=$?
   1.116 +	if [ $status -eq 0 -a -n "$1" ]; then
   1.117 +		while [ "$1" ]; do
   1.118 +			${action#-}_file "${1#$tardir/}" $here
   1.119 +			shift
   1.120 +		done
   1.121 +		$add $(ls -a | grep -v ^\.$  | grep -v ^\.\.$) | \
   1.122 +			$COMPRESS > "$archive"
   1.123  		status=$?
   1.124 -		if [ $status -eq 0 -a -n "$1" ]; then
   1.125 -			while [ "$1" ]; do
   1.126 -				${action#-}_file "${1#$tardir/}" $here
   1.127 -				shift
   1.128 -			done
   1.129 -			$add $(ls -a | grep -v ^\.$  | grep -v ^\.\.$) | \
   1.130 -				$COMPRESS > "$archive"
   1.131 -			status=$?
   1.132 -		fi
   1.133 -		cd - >/dev/null
   1.134 -		rm -rf $tmp
   1.135 -		exit $status
   1.136 -	esac
   1.137 +	fi
   1.138 +	cd - >/dev/null
   1.139 +	rm -rf $tmp
   1.140 +	exit $status
   1.141  done <<EOT
   1.142  tar\ -cf\ -	tar\ -xf\ -			$TAR_EXTS $XZ_EXTS $LRZIP_EXTS
   1.143  addcpio		cpio\ -id\ >\ /dev/null		$CPIO_EXTS $CPIOXZ_EXTS $CPIOLRZIP_EXTS
   1.144 @@ -294,7 +292,6 @@
   1.145  	$AWK_PROG -v uuid=$(id -u -n) "$AWK_MISC $1"
   1.146  }
   1.147  
   1.148 -
   1.149  # main: option switches
   1.150  case "$opt" in
   1.151      -i) # info: output supported extentions for progs that exist
   1.152 @@ -327,8 +324,7 @@
   1.153      -o) # open: mangle output for xarchive
   1.154  	while read filter exts; do
   1.155  # lrwxrwxrwx USR/GRP       0 2005-05-12 00:32:03 file -> /path/to/link
   1.156 -		case " $exts " in *\ $lc_ext\ *)
   1.157 -			$DECOMPRESS "$archive" | $filter | awk0 '
   1.158 +		in_exts $exts && $DECOMPRESS "$archive" | $filter | awk0 '
   1.159  {
   1.160  	attr=$1
   1.161  	size=$3
   1.162 @@ -336,14 +332,13 @@
   1.163  	time=$5
   1.164  	show($5 " ")
   1.165  }'
   1.166 -		esac
   1.167  	done <<EOT
   1.168  cpio\ -tv	$CPIO_EXTS $CPIOXZ_EXTS $CPIOLRZIP_EXTS $RPM_EXTS $TAZPKG_EXTS
   1.169  tar\ -tvf\ -	$TAR_EXTS $XZ_EXTS $LRZIP_EXTS $IPK_EXTS
   1.170  dpkg_c		$DEB_EXTS
   1.171  EOT
   1.172  	loop_fs $opt
   1.173 -	case " $ZIP_EXTS " in *\ $lc_ext\ *)
   1.174 +	if in_exts $ZIP_EXTS; then
   1.175  		if [ "$(which zipinfo)" ]; then
   1.176  # -rw-r--r--  2.3 unx    11512 tx defN YYYYMMDD.HHMMSS file
   1.177  			zipinfo -T -s-h-t "$archive" | awku '
   1.178 @@ -364,22 +359,21 @@
   1.179  	show($3 "   ")
   1.180  }'
   1.181  		fi
   1.182 -	esac
   1.183 +	fi
   1.184  # -----------+---------------------+-------
   1.185  #       6622 | 22.04.2005 12:29:14 | file
   1.186 -	[ "$lc_ext" == "cab" ] && cabextract -q -l "$archive" | awku '
   1.187 +	in_exts cab && cabextract -q -l "$archive" | awku '
   1.188  /[0-9]+ |/ {
   1.189  	size=$1
   1.190  	date=$3
   1.191  	time=$4
   1.192  	show($4 " | ")
   1.193  }'
   1.194 -	case " $RAR_EXTS " in *\ $lc_ext\ *)
   1.195  #-------------------------------------
   1.196  # bookmarks/mozilla_bookmarks.html
   1.197  #            11512     5231  45% 28-02-05 16:19 -rw-r--r-- F3F3477F m3b 2.9
   1.198  #       (or  11512     5231  45% 28-02-05 16:19 .D....     00000000 m3b 2.9)
   1.199 -		rar v -c- "$archive" | awku '
   1.200 +	in_exts $RAR_EXTS && rar v -c- "$archive" | awku '
   1.201  /-[0-9]+-/ {
   1.202  	getattr($6)
   1.203  	size=$1
   1.204 @@ -390,12 +384,9 @@
   1.205  {
   1.206  	name=substr($0,2)
   1.207  }'
   1.208 -	esac
   1.209 -	case "$lc_ext" in
   1.210 -	ace)
   1.211  # Date    ³Time ³Packed     ³Size     ³Ratio³File
   1.212  # 17.09.02³00:32³     394116³   414817³  95%³ OggDS0993.exe
   1.213 -		unace v -c- "$archive" | awku '
   1.214 +	in_exts ace && unace v -c- "$archive" | awku '
   1.215  /^[0-9][0-9]\./ {
   1.216  	# strip the funky little 3 off the end of size
   1.217  	size=substr($3,1,(length($3)-1))
   1.218 @@ -403,11 +394,9 @@
   1.219  	time=substr($1,10,5)
   1.220  	show($4 " ")
   1.221  }'
   1.222 -		;;
   1.223 -	7z|bcj|bcj2)
   1.224  # ------------------- ----- ------------ ------------  ------------
   1.225  # 1992-04-12 11:39:46 ....A          356               ANKETA.FRG
   1.226 -		7zr l "$archive" | awku '
   1.227 +	in_exts 7z bcj bcj2 && 7zr l "$archive" | awku '
   1.228  /^[0-9]+-/ {
   1.229  	date=$1
   1.230  	time=$2
   1.231 @@ -419,11 +408,9 @@
   1.232  	gsub(/\\/, "/", name)
   1.233  	display()
   1.234  }'
   1.235 -	esac
   1.236 -	case " $ARJ_EXTS " in *\ $lc_ext\ *)
   1.237  # 001) ANKETA.FRG
   1.238  #   3 MS-DOS          356        121 0.340 92-04-12 11:39:46                  1
   1.239 -		arj v "$archive" | awku '
   1.240 +	in_exts $ARJ_EXTS && arj v "$archive" | awku '
   1.241  BEGIN { name="" }
   1.242  /^[0-9]+\) / {
   1.243  	display()
   1.244 @@ -439,11 +426,9 @@
   1.245  /^[\t ]+SymLink -> / { link=$3; attr="l"substr(attr, 2) }
   1.246  /^---/ { display() }
   1.247  '
   1.248 -	esac
   1.249 -	case " $LHA_EXTS " in *\ $lc_ext\ *)
   1.250  # Desktop/up -> ..
   1.251  # lrwxrwxrwx     0/0           0       0 ****** -lhd- 0000 2009-05-03 16:59:03 [2]
   1.252 -		lha v -q -v  "$archive" | awk0 '
   1.253 +	in_exts $LHA_EXTS && lha v -q -v  "$archive" | awk0 '
   1.254  {
   1.255  	if ($4 == "") { getlink($0); next }
   1.256  	attr=$1
   1.257 @@ -453,35 +438,30 @@
   1.258  	time=$9
   1.259  	display()
   1.260  }'
   1.261 -	esac
   1.262 -	case " $LZO_EXTS " in *\ $lc_ext\ *)
   1.263  # ------         ------    ------  -----     ----    ----   ----
   1.264  # LZO1X-1         10057      5675  56.4%  2005-07-25 16:26  path/file
   1.265 -		lzop -Plv "$archive" | awku '
   1.266 +	in_exts $LZO_EXTS && lzop -Plv "$archive" | awku '
   1.267  /-[0-9]+-/ {
   1.268  	size=$2
   1.269  	date=$5
   1.270  	time=$6
   1.271  	show($6 "  ")
   1.272  }'
   1.273 -	esac
   1.274  	exit 0
   1.275  	;;
   1.276      -a|-n) # add to archive / new: create new archive
   1.277  	update $opt "$@"
   1.278  	while read exe args exts; do
   1.279 -		[ "$(which $exe)" ] || continue
   1.280 +		in_exts $exts && [ "$(which $exe)" ] || continue
   1.281  		[ "$opt$exe" = "-nzip" ] && args="-r"
   1.282 -		case " $exts " in *\ $lc_ext\ *)
   1.283 -			# only add the file's basename, not the full path
   1.284 -			while [ "$1" ]; do
   1.285 -				cd "$(dirname "$1")"
   1.286 -				$exe $args "$archive" "$(basename "$1")"
   1.287 -				status=$?
   1.288 -				shift
   1.289 -			done
   1.290 -			exit $status
   1.291 -		esac
   1.292 +		# only add the file's basename, not the full path
   1.293 +		while [ "$1" ]; do
   1.294 +			cd "$(dirname "$1")"
   1.295 +			$exe $args "$archive" "$(basename "$1")"
   1.296 +			status=$?
   1.297 +			shift
   1.298 +		done
   1.299 +		exit $status
   1.300  	done <<EOT
   1.301  zip	-g\ -r		$ZIP_EXTS
   1.302  rar	a		$RAR_EXTS
   1.303 @@ -493,14 +473,12 @@
   1.304      -r) # remove from archive passed files
   1.305  	update $opt "$@"
   1.306  	while read exe args exts; do
   1.307 -		[ "$(which $exe)" ] || continue
   1.308 -		case " $exts " in *\ $lc_ext\ *)
   1.309 -			$exe $args "$archive" "$@" | grep -q E_NOTIMPL && {
   1.310 -				echo -e "7z cannot delete files from solid archive." >&2
   1.311 -				exit $UNSUPPORTED
   1.312 -			}
   1.313 -			exit 0
   1.314 -		esac
   1.315 +		in_exts $exts && [ "$(which $exe)" ] || continue
   1.316 +		$exe $args "$archive" "$@" | grep -q E_NOTIMPL && {
   1.317 +			echo -e "7z cannot delete files from solid archive." >&2
   1.318 +			exit $UNSUPPORTED
   1.319 +		}
   1.320 +		exit 0
   1.321  	done <<EOT
   1.322  zip	-d	$ZIP_EXTS
   1.323  rar	d	$RAR_EXTS
   1.324 @@ -511,26 +489,23 @@
   1.325  	;;
   1.326      -e) # extract from archive passed files
   1.327  	while read arch exts; do
   1.328 -		case " $exts " in *\ $lc_ext\ *)
   1.329 -			$DECOMPRESS "$archive" | $arch "$@"
   1.330 -			exit $?
   1.331 -		esac
   1.332 +		in_exts $exts || continue
   1.333 +		$DECOMPRESS "$archive" | $arch "$@"
   1.334 +		exit $?
   1.335  	done <<EOT
   1.336  tar\ -xf\ -	$TAR_EXTS $IPK_EXTS $XZ_EXTS $LRZIP_EXTS
   1.337  cpio\ -idm	$CPIO_EXTS $CPIOXZ_EXTS $CPIOLRZIP_EXTS $RPM_EXTS $TAZPKG_EXTS
   1.338  EOT
   1.339  	while read exe x p exts; do
   1.340 -		[ "$(which $exe)" ] || continue
   1.341 -		case " $exts " in *\ $lc_ext\ *)
   1.342 -			[ "$x" != "N/A" ] && $exe $x "$archive" "$@"
   1.343 -			status=$?
   1.344 -			if [ "$p" != "N/A" -a $status -ne 0 ]; then
   1.345 -				echo Password protected, opening an x-term...
   1.346 -				$XTERM_PROG -e $exe $p "$archive" "$@"
   1.347 -				exit $?
   1.348 -			fi
   1.349 -			exit $status
   1.350 -		esac
   1.351 +		in_exts $exts && [ "$(which $exe)" ] || continue
   1.352 +		[ "$x" != "N/A" ] && $exe $x "$archive" "$@"
   1.353 +		status=$?
   1.354 +		if [ "$p" != "N/A" -a $status -ne 0 ]; then
   1.355 +			echo Password protected, opening an x-term...
   1.356 +			$XTERM_PROG -e $exe $p "$archive" "$@"
   1.357 +			exit $?
   1.358 +		fi
   1.359 +		exit $status
   1.360  	done <<EOT
   1.361  unzip		-n		N/A		$ZIP_EXTS
   1.362  dpkg-deb	-X		N/A		$DEB_EXTS