Skip to content

Commit fdd09e5

Browse files
committed
Support bzip3
1 parent 4c4de88 commit fdd09e5

File tree

10 files changed

+95
-17
lines changed

10 files changed

+95
-17
lines changed

archwrap_alias

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ alias uv='u -l'
55
alias tard='tgzd -t'
66
alias tbrd='tgzd -B'
77
alias tbzd='tgzd -b'
8+
alias tb3d='tgzd -3'
89
alias tlzd='tgzd -l'
910
alias t7zd='tgzd -7'
1011
alias tlz4='tgzd -4'

bin/bzip3best

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env sh
2+
# This script is part of Martin V\"ath's archwrap project.
3+
# (C) Martin V\"ath <martin at mvath.de>
4+
# SPDX-License-Identifier: BSD-3-Clause
5+
set -u
6+
exec bzip3 -e9 ${1+"$@"}

bin/bzip3d

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
tgzd

bin/pd

+21-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ where option is one of the following:
2323
-o/O select/unselect brotli
2424
-y/Y select/unselect zstd
2525
-b/B select/unselect bzip
26+
-3/2 select/unselect bzip3
2627
-g/G select/unselect gzip
2728
-i/I select/unselect lz4
2829
-7// select/unselect 7z
@@ -43,11 +44,12 @@ where option is one of the following:
4344
-Q quick: Use gzip instead of zopfli (even if zopfli is available)"
4445
exit ${1:-1}
4546
}
46-
unset zipd tgzd gzipbest brotlibest bzipbest za lz4best \
47+
unset zipd tgzd gzipbest brotlibest bzipbest bzip3best za lz4best \
4748
lzmabest xzbest zstdbest lrzip
4849
tgzapp='tgz'
4950
tbrapp='tbr'
5051
tbzapp='tbz'
52+
tb3app='tb3'
5153
svzapp='t7z'
5254
tz4app='tz4'
5355
lzmapp='tlz'
@@ -73,6 +75,7 @@ Selectall() {
7375
withtgz=:
7476
withtbr=:
7577
withtbz=:
78+
withtb3=:
7679
withsvz=:
7780
withtz4=:
7881
withlzm=:
@@ -86,6 +89,7 @@ Selectnone() {
8689
withtgz=false
8790
withtbr=false
8891
withtbz=false
92+
withtb3=false
8993
withsvz=false
9094
withtz4=false
9195
withlzm=false
@@ -113,7 +117,7 @@ case ${0##*/} in
113117
esac
114118

115119
OPTIND=1
116-
while getopts 'vPqQXdcCSTsnaA7/iIlLrYyWwRNtUzZoObBgGpFf0512486EhH' opt
120+
while getopts 'vPqQXdcCSTsnaA327/iIlLrYyWwRNtUzZoObBgGpFf0512486EhH' opt
117121
do case $opt in
118122
v) verbose=:;;
119123
P) DeselectUnpopular;;
@@ -122,6 +126,7 @@ do case $opt in
122126
X) tgzapp='tar.gz'
123127
tbrapp='tar.br'
124128
tbzapp='tar.bz2'
129+
tb3app='tar.bz3'
125130
svzapp='tar.7z'
126131
tz4app='tar.lz4'
127132
lzmapp='tar.lzma'
@@ -144,6 +149,7 @@ do case $opt in
144149
z) withzip=:;;
145150
o) withtbr=:;;
146151
b) withtbz=:;;
152+
3) withtb3=:;;
147153
g) withtgz=:;;
148154
7) withsvz=:;;
149155
i) withtz4=:;;
@@ -156,6 +162,7 @@ do case $opt in
156162
Z) withzip=false;;
157163
O) withtbr=false;;
158164
B) withtbz=false;;
165+
2) withtb3=false;;
159166
G) withtgz=false;;
160167
/) withsvz=false;;
161168
I) withtz4=false;;
@@ -243,6 +250,7 @@ Dopack() {
243250
tgznow=$withtgz
244251
tbrnow=$withtbr
245252
tbznow=$withtbz
253+
tb3now=$withtb3
246254
svznow=$withsvz
247255
tz4now=$withtz4
248256
lzmnow=$withlzm
@@ -254,15 +262,16 @@ Dopack() {
254262
$tgznow && test -s "$destname.$tgzapp" && tgznow=false
255263
$tbrnow && test -s "$destname.$tbrapp" && tbrnow=false
256264
$tbznow && test -s "$destname.$tbzapp" && tbznow=false
265+
$tb3now && test -s "$destname.$tb3app" && tb3now=false
257266
$svznow && test -s "$destname.$svzapp" && svznow=false
258267
$tz4now && test -s "$destname.$tz4app" && tz4now=false
259268
$lzmnow && test -s "$destname.$lzmapp" && lzmnow=false
260269
$txznow && test -s "$destname.$txzapp" && txznow=false
261270
$tzsnow && test -s "$destname.$txzapp" && tzsnow=false
262271
$lrznow && test -s "$destname.$lrzapp" && lrznow=false
263272
fi
264-
if $tgznow || $tbrnow || $tbznow || $svznow || $tz4now || $lzmnow || \
265-
$txznow || $tzsnow || $lrznow
273+
if $tgznow || $tbrnow || $tbznow || $tb3now || $svznow || $tz4now || \
274+
$lzmnow || $txznow || $tzsnow || $lrznow
266275
then tarnow=:
267276
fi
268277
$preserv && $tarnow && test -s "$destname.tar" && tarnow=false
@@ -304,6 +313,14 @@ Dopack() {
304313
|| Errunp 'bzip2' "$nameb"
305314
fi
306315
Compare
316+
nameb=$destname.$tb3app
317+
if $tb3now
318+
then EchoCond "Creating $nameb"
319+
OptExternal bzip3best
320+
"$bzip3best" -c -- "$destname.tar" >|"$nameb" \
321+
|| Errunp 'bzip3' "$nameb"
322+
fi
323+
Compare
307324
nameb=$destname.$svzapp
308325
if $svznow
309326
then EchoCond "Creating $nameb"

bin/tb3d

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
tgzd

bin/tgzd

+17-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Create archive ./zipdir.tgz with contents of zipdir
1818
-g use zopfli (archivename is ./zipdir.tgz or ./zipdir.tar.gz)
1919
-Q quick: Use gzip instead of zopfli (even if zopfli is available)
2020
-b use bzip2 (archivename is ./zipdir.tbz or ./zipdir.tar.bz2)
21+
-3 use bzip3 (archivename is ./zipdir.tb3 or ./zipdir.tar.bz3)
2122
-l use lzma (archivename is ./zipdir.tlz or ./zipdir.tar.lzma)
2223
-L use xz (archivename is ./zipdir.txz or ./zipdir.tar.xz)
2324
-4 use lz4 (archivename is ./zipdir.tz4 or ./zipdir.tar.lz4)
@@ -85,6 +86,11 @@ case ${0##*/} in
8586
*lz*)
8687
comp=l
8788
xnames=:;;
89+
*tb*3*)
90+
comp=3;;
91+
*bz*3*)
92+
comp=3
93+
xnames=:;;
8894
*tbz*)
8995
comp=b;;
9096
*bz*)
@@ -109,7 +115,7 @@ case ${0##*/} in
109115
comp=;;
110116
esac
111117
OPTIND=1
112-
while getopts 'qQAF@:R:SETcCfdDnBzbg74lLzmrtpPsXxhH' opt
118+
while getopts 'qQAF@:R:SETcCfdDnBzbg734lLzmrtpPsXxhH' opt
113119
do case $opt in
114120
q) quiet=:;;
115121
Q) quick=:;;
@@ -137,6 +143,7 @@ do case $opt in
137143
[lzm]) comp=l;;
138144
L) comp=x;;
139145
7) comp=7;;
146+
3) comp=3;;
140147
4) comp=4;;
141148
r) comp=r;;
142149
X) xnames=:;;
@@ -151,8 +158,8 @@ do case $opt in
151158
done
152159
shift $(( $OPTIND - 1 ))
153160

154-
unset tarprg xzbest brotlibest bzipbest gzipbest sevenzbest lzmabest lrzip \
155-
zstdbest lz4best
161+
unset tarprg xzbest brotlibest bzipbest bzip3best gzipbest sevenzbest lzmabest \
162+
lrzip zstdbest lz4best
156163

157164
if $calc_version_only
158165
then CalcGnuTarVersion && printf '%s' "$GNUTARVERSION"
@@ -206,7 +213,9 @@ else ! $xattr || ! $tar_knows_xattr || Push taropts '--xattrs'
206213
B) OptExternal brotlibest
207214
Push taropts '--use-compress-program' "$brotlibest";;
208215
b) OptExternal bzipbest
209-
Push taropts '--use-compress-program' "$bzipbest";;
216+
Push taropts '--use-compress-program' "$bzip3best";;
217+
3) OptExternal bzip3best
218+
Push taropts '--use-compress-program' "$bzip3best";;
210219
z) OptExternal zstdbest
211220
Push taropts '--use-compress-program' "$zstdbest";;
212221
g) CalcGzipbest $quick
@@ -229,6 +238,7 @@ then case $comp in
229238
g) ext='tar.gz';;
230239
B) ext='tar.br';;
231240
b) ext='tar.bz2';;
241+
3) ext='tar.bz3';;
232242
z) ext='tar.zst';;
233243
7) ext='tar.7z';;
234244
4) ext='tar.lz4';;
@@ -241,6 +251,7 @@ else case $comp in
241251
g) ext='tgz';;
242252
B) ext='tbr';;
243253
b) ext='tbz';;
254+
3) ext='tb3';;
244255
z) ext='tzs';;
245256
7) ext='t7z';;
246257
4) ext='tz4';;
@@ -346,6 +357,8 @@ DoDir() {
346357
"$brotlibest" -o "$name.$ext" -- "$archive";;
347358
b) OptExternal bzipbest
348359
"$bzipbest" -k -c -- "$archive" >|"$name.$ext";;
360+
3) OptExternal bzip3best
361+
"$bzip3best" -c -- "$archive" >|"$name.$ext";;
349362
z) OptExternal zstdbest
350363
"$zstdbest" -o "$name.$ext" <"$archive";;
351364
7) OptExternal sevenzbest 7zbest

bin/u

+43-7
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,13 @@ Getf() {
152152
for i in '' .tar .TAR
153153
do for j in \
154154
z br bro brotli tbr zst zstd tzs tzst tzstd \
155-
bz2 bz tbz2 tbz gz tgz taz dir tl4 tz4 tlz4 lz4 \
156-
7z t7z lz lzm lzma xz tlz txz lrz tlr tlrz lha lzh \
157-
arj arz zip jar xpi crate cra apk okular rar \
155+
bz2 bz3 bz tbz2 tbz3 tb3 tbz gz tgz taz dir tl4 tz4 \
156+
tlz4 lz4 7z t7z lz lzm lzma xz tlz txz lrz tlr tlrz \
157+
lha lzh arj arz zip jar xpi crate cra apk okular rar \
158158
Z BR BRO BROTLI TBR ZST ZSTD TZS TZST TZSTD \
159-
BZ2 BZ TBZ2 TBZ GZ TGZ TAZ DIR TL4 TZ4 TLZ4 LZ4 \
160-
7Z T7Z LZ LZM LZMA XZ TLZ TXZ LRZ TLR TLRZ LHA LZH \
161-
ARJ ARZ ZIP JAR XPI CRATE CRA APK OKULAR RAR
159+
BZ2 BZ3 BZ TBZ2 TBZ3 TB3 TBZ GZ TGZ TAZ DIR TL4 TZ4 \
160+
TLZ4 LZ4 7Z T7Z LZ LZM LZMA XZ TLZ TXZ LRZ TLR TLRZ \
161+
LHA LZH ARJ ARZ ZIP JAR XPI CRATE CRA APK OKULAR RAR
162162
do f=$1$i.$j
163163
test -f "$f" && return
164164
done
@@ -232,6 +232,9 @@ DoCases() {
232232
*.tbz|*.tbz2|*.TBZ|*.TBZ2)
233233
typ='tar.bz2'
234234
full=:;;
235+
*.tb3|*.tbz3|*.TB3|*.TBZ3)
236+
typ='tar.bz3'
237+
full=:;;
235238
*.tlz|*.TLZ)
236239
typ='tar.lzma'
237240
full=:;;
@@ -252,6 +255,8 @@ DoCases() {
252255
typ='zst';;
253256
*.lz4|*.Lz4)
254257
typ='lz4';;
258+
*.bz3|*.BZ3)
259+
typ='bz3';;
255260
*.bz|*.bz2|*.BZ|*.BZ2)
256261
typ='bz2';;
257262
*.lm|*.lzm|*.lzma|*.LM|*.LZM|*.LZMA)
@@ -297,7 +302,7 @@ DoCases() {
297302
return 0
298303
}
299304

300-
unset bzip brotli zstdbest lz4 gzip lzma xz lrzip za unzip unarj lha unrar
305+
unset bzip bzip3 brotli zstdbest lz4 gzip lzma xz lrzip za unzip unarj lha unrar
301306
DoIt() {
302307
case $typ in
303308
tar)
@@ -404,6 +409,24 @@ tar.bz2)
404409
fi;;
405410
t*) "$bzip" -t -v -- "$f";;
406411
esac || MyErr;;
412+
tar.bz3)
413+
OptExternal bzip3
414+
case $mode in
415+
u*) IntoDir || return
416+
eval "set -- a $taropts"
417+
shift
418+
if $tar_knows_use_compress_program
419+
then "$tarprg" -x $verboseopt $taruse "$bzip3" ${1+"$@"} -f "$f"
420+
else "$bzip3" -d -c -- "$f" | \
421+
"$tarprg" -x $verboseopt ${1+"$@"} -f -
422+
fi;;
423+
s*) if $tar_knows_use_compress_program
424+
then "$tarprg" -t $verbose $taruse "$bzip3" -f "$f"
425+
else "$bzip3" -d -c -- "$f" | \
426+
"$tarprg" -t $verbose -f -
427+
fi;;
428+
t*) "$bzip3" -t -- "$f" && echo "$f OK";;
429+
esac || MyErr;;
407430
tar.lzma)
408431
OptExternal lzma
409432
case $mode in
@@ -527,6 +550,19 @@ bz2)
527550
s*) "$bzip" -l -v -- "$f";;
528551
t*) "$bzip" -t -v -- "$f";;
529552
esac || MyErr;;
553+
bz3)
554+
OptExternal bzip3
555+
case $mode in
556+
u*) IntoDir || return
557+
if $mdir
558+
then x=$name.bz3
559+
ln -s -- "$f" "$x" || cp -a -- "$f" "$x" \
560+
&& "$bzip3" -d -- "$x"
561+
else "$bzip3" -d -c -- "$f" >"$pwdname"
562+
fi;;
563+
s*) MyErrNot;;
564+
t*) "$bzip3" -t -- "$f" && echo "$f OK";;
565+
esac || MyErr;;
530566
lzma)
531567
OptExternal lzma
532568
case $mode in

zsh/_pd

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ _arguments -s -S -A '-*' : \
2626
'-G[unselect gzip]' \
2727
'-i[select lz4]' \
2828
'-I[unselect lz4]' \
29+
'-3[select bzip3]' \
30+
'-2[unselect bzip3]' \
2931
'-7[select 7z]' \
3032
'-/[unselect 7z]' \
3133
'-l[select lzma]' \

zsh/_tgzd

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ _arguments -s -S -A '-*' : \
77
'-g[use gzip (appendix .tgz or .tar.gz)]' \
88
'-B[use brotli (appendix .tbr or .tar.br)]' \
99
'-b[use bzip2 (appendix .tbz or .tar.bz2)]' \
10+
'-3[use bz3 (appendix .tb3 or .tar.bz3)]' \
1011
'-z[use zstd (appendix .tzs or .tar.zst)]' \
1112
'-l[use lzma (appendix .tlz or .tar.lzma)]' \
1213
'-L[use xz (appendix .txz or .tar.xz)]' \
1314
'-7[use 7z (appendix .t7z or .tar.7z)]' \
1415
'-4[use lz4 (appendix .tz4 or .tar.lz4)]' \
1516
'-r[use lrzip (appendix .tlr or .tar.lrz)]' \
16-
'-t[use Tar (appendix .tar)]' \
17+
'-t[use tar (appendix .tar)]' \
1718
'-X[use long names (appendix .tar.gz over .tgz)]' \
1819
'-x[use short names (appendix .tgz over .tar.gz)]' \
1920
'-A[store extended attributes]' \

zsh/_u

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ _arguments -s -S -A '-*' : \
2424
'-p[ignore GNUTARVERSION]' \
2525
'-P[print output for GNUTARVERSION]' \
2626
'-q[quiet]' \
27-
'*:archives:_files -g "*.(tar|TAR|z|br|bro|brotli|tbr|zst|zstd|tzst|tzstd|tzs|tl4|tz4|tlz4|lz4|bz2|bz|tbz2|tbz|gz|tgz|taz|dir|7z|t7z|lz|lzm|lzma|xz|tlz|txz|lrz|tlr|tlrz|lha|lzh|arj|arz|zip|jar|xpi|crate|cra|apk|okular|rar|Z|BR|BRO|BROTLI|TBR|ZST|ZSTD|TZST|TZSTD|TZS|TL4|TZ4|TLZ4|LZ4|BZ2|BZ|TBZ2|TBZ|GZ|TGZ|TAZ|DIR|7Z|T7Z|LZ|LZM|LZMA|XZ|TLZ|TXZ|LRZ|TLR|TLRZ|LHA|LZH|ARJ|ARZ|ZIP|JAR|XPI|CRATE|CRA|APK|OKULAR|RAR)(-.)"'
27+
'*:archives:_files -g "*.(tar|TAR|z|br|bro|brotli|tbr|zst|zstd|tzst|tzstd|tzs|tl4|tz4|tlz4|lz4|bz3|bz2|bz|tbz3|tbz2|tb3|tbz|gz|tgz|taz|dir|7z|t7z|lz|lzm|lzma|xz|tlz|txz|lrz|tlr|tlrz|lha|lzh|arj|arz|zip|jar|xpi|crate|cra|apk|okular|rar|Z|BR|BRO|BROTLI|TBR|ZST|ZSTD|TZST|TZSTD|TZS|TL4|TZ4|TLZ4|LZ4|BZ3|BZ2|BZ|TBZ3|TBZ2|TB3|TBZ|GZ|TGZ|TAZ|DIR|7Z|T7Z|LZ|LZM|LZMA|XZ|TLZ|TXZ|LRZ|TLR|TLRZ|LHA|LZH|ARJ|ARZ|ZIP|JAR|XPI|CRATE|CRA|APK|OKULAR|RAR)(-.)"'

0 commit comments

Comments
 (0)