commit e323ebdc4f71e8ff39c31ff6ec493ff9572feb78 Author: Rosa Date: Wed Feb 1 15:17:18 2012 +0400 Automatic import for version 1.0.6 diff --git a/.abf.yml b/.abf.yml new file mode 100644 index 0000000..5d0a717 --- /dev/null +++ b/.abf.yml @@ -0,0 +1,2 @@ +sources: + "bzip2-1.0.6.tar.gz": 3f89f861209ce81a6bab1fd1998c0ef311712002 diff --git a/bzgrep b/bzgrep new file mode 100644 index 0000000..570e88e --- /dev/null +++ b/bzgrep @@ -0,0 +1,68 @@ +#!/bin/sh + +# zgrep -- a wrapper around a grep program that decompresses files as needed +# Adapted from a version sent by Charles Levert +# Adapted to bzip2 by Bernhard Rosenkraenzer + +PATH="/usr/bin:$PATH"; export PATH + +prog=`echo $0 | sed 's|.*/||'` +case "$prog" in + *egrep) grep=${EGREP-egrep} ;; + *fgrep) grep=${FGREP-fgrep} ;; + *) grep=${GREP-grep} ;; +esac +pat="" +while test $# -ne 0; do + case "$1" in + -e | -f) opt="$opt $1"; shift; pat="$1" + if test "$grep" = grep; then # grep is buggy with -e on SVR4 + grep=egrep + fi;; + -A | -B) opt="$opt $1 $2"; shift;; + -*) opt="$opt $1";; + *) if test -z "$pat"; then + pat="$1" + else + break; + fi;; + esac + shift +done + +if test -z "$pat"; then + echo "grep through bzip2 files" + echo "usage: $prog [grep_options] pattern [files]" + exit 1 +fi + +list=0 +silent=0 +op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` +case "$op" in + *l*) list=1 +esac +case "$op" in + *h*) silent=1 +esac + +if test $# -eq 0; then + bzip2 -cdfq | $grep $opt "$pat" + exit $? +fi + +res=0 +for i do + if test $list -eq 1; then + bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i + r=$? + elif test $# -eq 1 -o $silent -eq 1; then + bzip2 -cdfq "$i" | $grep $opt "$pat" + r=$? + else + bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" + r=$? + fi + test "$r" -ne 0 && res="$r" +done +exit $res diff --git a/bzip2-1.0.6-makefile.diff b/bzip2-1.0.6-makefile.diff new file mode 100644 index 0000000..74e788f --- /dev/null +++ b/bzip2-1.0.6-makefile.diff @@ -0,0 +1,217 @@ +diff -Naur bzip2-1.0.6/Makefile bzip2-1.0.6.oden/Makefile +--- bzip2-1.0.6/Makefile 2010-09-11 00:46:02.000000000 +0200 ++++ bzip2-1.0.6.oden/Makefile 2010-09-20 12:22:58.718326583 +0200 +@@ -12,45 +12,76 @@ + # in the file LICENSE. + # ------------------------------------------------------------------ + ++include config.in ++ ++# define libdir name ++lib ?= lib ++ ++# define standard opt flags ++CFLAGS ?= -O2 -fomit-frame-pointer ++ + SHELL=/bin/sh + + # To assist in cross-compiling + CC=gcc + AR=ar + RANLIB=ranlib +-LDFLAGS= ++LDFLAGS+= + +-BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) ++# Large file support ++CFLAGS += -D_FILE_OFFSET_BITS=64 + +-# Where you want it installed when you do 'make install' +-PREFIX=/usr/local ++# Warnings ++CFLAGS += -Wall -Winline + +- +-OBJS= blocksort.o \ +- huffman.o \ +- crctable.o \ +- randtable.o \ +- compress.o \ +- decompress.o \ +- bzlib.o +- +-all: libbz2.a bzip2 bzip2recover test +- +-bzip2: libbz2.a bzip2.o +- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 +- +-bzip2recover: bzip2recover.o +- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o +- +-libbz2.a: $(OBJS) +- rm -f libbz2.a +- $(AR) cq libbz2.a $(OBJS) +- @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ +- -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \ +- echo $(RANLIB) libbz2.a ; \ +- $(RANLIB) libbz2.a ; \ +- fi ++OBJS= blocksort.lo \ ++ huffman.lo \ ++ crctable.lo \ ++ randtable.lo \ ++ compress.lo \ ++ decompress.lo \ ++ bzlib.lo ++ ++LIB=libbz2.la ++ ++prefix=/usr ++bindir=$(prefix)/bin ++libdir=$(prefix)/$(lib) ++mandir=$(prefix)/share/man ++includedir=$(prefix)/include ++DESTDIR= ++ ++all: $(LIB) bzip2 bzip2recover test ++ ++install: all test ++ mkdir -p $(DESTDIR)$(bindir) ++ libtool --mode=install install -s -m 0755 bzip2 $(DESTDIR)$(bindir)/ ++ libtool --mode=install install -s -m 0755 bzip2recover $(DESTDIR)$(bindir)/ ++ libtool --mode=install install -m 0755 bzdiff $(DESTDIR)$(bindir)/ ++ libtool --mode=install install -m 0755 bzmore $(DESTDIR)$(bindir)/ ++ ln -sf bzip2 $(DESTDIR)$(bindir)/bunzip2 ++ ln -sf bzip2 $(DESTDIR)$(bindir)/bzcat ++ mkdir -p $(DESTDIR)$(mandir)/man1 ++ install -c -m 0644 bzip2.1 $(DESTDIR)$(mandir)/man1/ ++ install -c -m 0644 bzdiff.1 $(DESTDIR)$(mandir)/man1/ ++ install -c -m 0644 bzmore.1 $(DESTDIR)$(mandir)/man1/ ++ ln -sf bzip2.1 $(DESTDIR)$(mandir)/man1/bunzip2.1 ++ ln -sf bzip2.1 $(DESTDIR)$(mandir)/man1/bzcat.1 ++ ln -sf bzip2.1 $(DESTDIR)$(mandir)/man1/bzip2recover.1 ++ mkdir -p $(DESTDIR)$(libdir) ++ libtool --mode=install install $(LIB) $(DESTDIR)$(libdir) ++ mkdir -p $(DESTDIR)$(includedir) ++ install -c -m 0644 bzlib.h $(DESTDIR)$(includedir) ++ ++bzip2: bzip2.c $(LIB) ++ libtool --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ bzip2.c $(LIB) ++ ++bzip2recover: bzip2recover.c ++ libtool --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ bzip2recover.c ++ ++$(LIB): $(OBJS) ++ libtool --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) -rpath $(libdir) \ ++ -version-info 1:0:0 + + check: test + test: bzip2 +@@ -69,70 +100,18 @@ + cmp sample3.tst sample3.ref + @cat words3 + +-install: bzip2 bzip2recover +- if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi +- if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi +- if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi +- if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi +- if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi +- cp -f bzip2 $(PREFIX)/bin/bzip2 +- cp -f bzip2 $(PREFIX)/bin/bunzip2 +- cp -f bzip2 $(PREFIX)/bin/bzcat +- cp -f bzip2recover $(PREFIX)/bin/bzip2recover +- chmod a+x $(PREFIX)/bin/bzip2 +- chmod a+x $(PREFIX)/bin/bunzip2 +- chmod a+x $(PREFIX)/bin/bzcat +- chmod a+x $(PREFIX)/bin/bzip2recover +- cp -f bzip2.1 $(PREFIX)/man/man1 +- chmod a+r $(PREFIX)/man/man1/bzip2.1 +- cp -f bzlib.h $(PREFIX)/include +- chmod a+r $(PREFIX)/include/bzlib.h +- cp -f libbz2.a $(PREFIX)/lib +- chmod a+r $(PREFIX)/lib/libbz2.a +- cp -f bzgrep $(PREFIX)/bin/bzgrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep +- chmod a+x $(PREFIX)/bin/bzgrep +- cp -f bzmore $(PREFIX)/bin/bzmore +- ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless +- chmod a+x $(PREFIX)/bin/bzmore +- cp -f bzdiff $(PREFIX)/bin/bzdiff +- ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp +- chmod a+x $(PREFIX)/bin/bzdiff +- cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 +- chmod a+r $(PREFIX)/man/man1/bzgrep.1 +- chmod a+r $(PREFIX)/man/man1/bzmore.1 +- chmod a+r $(PREFIX)/man/man1/bzdiff.1 +- echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 +- echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 +- echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 +- echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 +- + clean: +- rm -f *.o libbz2.a bzip2 bzip2recover \ ++ rm -f *.o *.lo *.a $(LIB) bzip2 bzip2recover \ + sample1.rb2 sample2.rb2 sample3.rb2 \ + sample1.tst sample2.tst sample3.tst + +-blocksort.o: blocksort.c +- @cat words0 +- $(CC) $(CFLAGS) -c blocksort.c +-huffman.o: huffman.c +- $(CC) $(CFLAGS) -c huffman.c +-crctable.o: crctable.c +- $(CC) $(CFLAGS) -c crctable.c +-randtable.o: randtable.c +- $(CC) $(CFLAGS) -c randtable.c +-compress.o: compress.c +- $(CC) $(CFLAGS) -c compress.c +-decompress.o: decompress.c +- $(CC) $(CFLAGS) -c decompress.c +-bzlib.o: bzlib.c +- $(CC) $(CFLAGS) -c bzlib.c +-bzip2.o: bzip2.c +- $(CC) $(CFLAGS) -c bzip2.c +-bzip2recover.o: bzip2recover.c +- $(CC) $(CFLAGS) -c bzip2recover.c ++.SUFFIXES: .c .o .lo ++ ++%.o: %.c bzlib.h bzlib_private.h ++ $(CC) $(CFLAGS) -c $< + ++%.lo: %.c bzlib.h bzlib_private.h ++ libtool --mode=compile $(CC) $(CFLAGS) -c $< + + distclean: clean + rm -f manual.ps manual.html manual.pdf +diff -Naur bzip2-1.0.6/Makefile-libbz2_so bzip2-1.0.6.oden/Makefile-libbz2_so +--- bzip2-1.0.6/Makefile-libbz2_so 2010-09-11 01:07:52.000000000 +0200 ++++ bzip2-1.0.6.oden/Makefile-libbz2_so 2010-09-20 12:22:58.719327028 +0200 +@@ -20,11 +20,13 @@ + # in the file LICENSE. + # ------------------------------------------------------------------ + ++include config.in + + SHELL=/bin/sh + CC=gcc + BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) ++CFLAGS +=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) ++LDFLAGS += + + OBJS= blocksort.o \ + huffman.o \ +@@ -35,8 +37,8 @@ + bzlib.o + + all: $(OBJS) +- $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 $(OBJS) +- $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.6 ++ $(CC) $(CFLAGS) -shared -Wl,-soname -Wl,libbz2.so.1.0 $(LDFLAGS) -o libbz2.so.1.0.6 $(OBJS) ++ $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.6 + rm -f libbz2.so.1.0 + ln -s libbz2.so.1.0.6 libbz2.so.1.0 + diff --git a/bzip2.spec b/bzip2.spec new file mode 100644 index 0000000..77ed80c --- /dev/null +++ b/bzip2.spec @@ -0,0 +1,235 @@ +%define major 1 +%define libname %mklibname %{name}_ %{major} +%define develname %mklibname %{name} -d + +%define buildpdf 0 + +Summary: Extremely powerful file compression utility +Name: bzip2 +Version: 1.0.6 +Release: %mkrel 3 +License: BSD +Group: Archiving/Compression +URL: http://www.bzip.org/index.html +Source0: http://www.bzip.org/%{version}/%{name}-%{version}.tar.gz +Source1: bzgrep +Source2: bzme +Source3: bzme.1 +Patch0: bzip2-1.0.6-makefile.diff +Requires: mktemp +Requires: %{libname} = %{version}-%{release} +%if %buildpdf +BuildRequires: tetex-dvips +BuildRequires: tetex-latex +%endif +BuildRequires: texinfo +BuildRequires: libtool +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot + +%description +Bzip2 compresses files using the Burrows-Wheeler block-sorting text +compression algorithm, and Huffman coding. Compression is generally +considerably better than that achieved by more conventional LZ77/LZ78-based +compressors, and approaches the performance of the PPM family of statistical +compressors. + +The command-line options are deliberately very similar to those of GNU Gzip, +but they are not identical. + +%package -n %{libname} +Summary: Libraries for developing apps which will use bzip2 +Group: System/Libraries + +%description -n %{libname} +Library of bzip2 functions, for developing apps which will use the +bzip2 library (aka libz2). + +%package -n %{develname} +Summary: Header files for developing apps which will use bzip2 +Group: Development/C +Requires: %{libname} = %{version}-%{release} +Provides: lib%{name}-devel = %{version}-%{release} +Provides: %{name}-devel = %{version}-%{release} +Obsoletes: %{mklibname bzip2_ 1 -d} < 1.0.5-3 +Provides: %{mklibname bzip2_ 1 -d} + +%description -n %{develname} +Header files and static library of bzip2 functions, for developing apps which +will use the bzip2 library (aka libz2). + +%prep + +%setup -q +%patch0 -p1 -b .makefile + +echo "lib = %{_lib}" >> config.in +echo "CFLAGS = %{optflags}" >> config.in +echo "LDFLAGS = %{ldflags}" >> config.in + +cp %{SOURCE1} bzgrep +cp %{SOURCE2} bzme +cp %{SOURCE3} bzme.1 + +%build +%make -f Makefile-libbz2_so +%make + +%if %buildpdf +texi2dvi --pdf manual.texi +%endif + +%install +rm -rf %{buildroot} + +%makeinstall_std + +install -m0755 bzme %{buildroot}%{_bindir}/ +install -m0755 bzgrep %{buildroot}%{_bindir}/ +install -m0644 bzgrep.1 %{buildroot}%{_mandir}/man1/ + +cat > %{buildroot}%{_bindir}/bzless < 1.0.6-3mdv2011.0 ++ Revision: 663345 +- mass rebuild + +* Fri Oct 15 2010 Thierry Vignaud 1.0.6-2mdv2011.0 ++ Revision: 585829 +- bzme: able to recompress rar files too +- bzme: adapt for Fedora/RHEL + +* Mon Sep 20 2010 Oden Eriksson 1.0.6-1mdv2011.0 ++ Revision: 579942 +- 1.0.6 +- rediffed P0 + +* Sun Mar 14 2010 Oden Eriksson 1.0.5-7mdv2010.1 ++ Revision: 518988 +- rebuild + +* Sun Aug 09 2009 Oden Eriksson 1.0.5-6mdv2010.0 ++ Revision: 413193 +- rebuild + +* Sat Jan 10 2009 Tomasz Pawel Gajc 1.0.5-5mdv2009.1 ++ Revision: 328087 +- merge both patches into one +- make sure that -D_FILE_OFFSET_BITS=64 is always passed during compilation (mdvbz #46851) + +* Sat Dec 20 2008 Oden Eriksson 1.0.5-4mdv2009.1 ++ Revision: 316557 +- use -fPIC +- really use %%{optflags} and %%{ldflags} + +* Sun Jul 06 2008 Tomasz Pawel Gajc 1.0.5-3mdv2009.0 ++ Revision: 232090 +- new library policy +- protect major +- spec file clean + +* Mon Jun 16 2008 Thierry Vignaud 1.0.5-2mdv2009.0 ++ Revision: 220495 +- rebuild + + + Pixel + - do not call ldconfig in %%post/%%postun, it is now handled by filetriggers + +* Fri Mar 21 2008 Gustavo De Nardin 1.0.5-1mdv2008.1 ++ Revision: 189334 +- new version, 1.0.5, fixes a security hole + +* Fri Jan 11 2008 Thierry Vignaud 1.0.4-3mdv2008.1 ++ Revision: 149066 +- rebuild +- kill re-definition of %%buildroot on Pixel's request + + + Olivier Blin + - restore BuildRoot + +* Thu Aug 16 2007 Thierry Vignaud 1.0.4-2mdv2008.0 ++ Revision: 64221 +- rebuild + + +* Fri Jan 05 2007 Oden Eriksson 1.0.4-1mdv2007.0 ++ Revision: 104592 +- 1.0.4 +- rediffed the makefile patch (now P0) +- nuked upstream fixes for CAN-2005-0953, CAN-2005-0758 and other sec holes +- rebuild +- Import bzip2 + +* Sun Jul 30 2006 Oden Eriksson 1.0.3-6mdk +- sync with fedora (1.0.3-2.2.1) +- dropped the progress patch (P2) because it don't work with + large files, fixes #22262 + +* Sat May 13 2006 Stefan van der Eijk 1.0.3-5mdk +- rebuild for sparc + +* Tue Jan 31 2006 Oden Eriksson 1.0.3-4mdk +- merge with the 1.0.3-1.2.20060mdk relese (CVE-2005-0953,CVE-2005-0758) + +* Sat Jan 07 2006 Christiaan Welvaart 1.0.3-3mdk +- add BuildRequires: libtool + +* Sat Dec 31 2005 Mandriva Linux Team 1.0.3-2mdk +- Rebuild + +* Wed Jun 08 2005 Götz Waschk 1.0.3-1mdk +- update patch 1 +- fix URLs +- new version + +* Fri Feb 11 2005 Olivier Blin 1.0.2-20mdk +- bzme: allow to force compression with -F option + (#11183, patch from Michael Scherer) +- fix summary ended with dot + +* Fri Sep 17 2004 Gwenole Beauchesne 1.0.2-19mdk +- ship with bzdiff, bzmore +- automake build is evil here for a so small project + +* Tue Apr 06 2004 Thierry Vignaud 1.0.2-18mdk +- fix url + diff --git a/bzme b/bzme new file mode 100644 index 0000000..6d28193 --- /dev/null +++ b/bzme @@ -0,0 +1,212 @@ +#!/bin/sh +# bzme re-compress gzip, zip, ... files into bzip2 +#============================================================================== +# Copyright (C) 1999-2002 MandrakeSoft (tvignaud@mandrakesoft.com) +# By Thierry Vignaud +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The GNU General Public License can be read at +# http://www.fsf.org/copyleft/gpl.html +#============================================================================== +# +# Know bugs: +# ---------- +# - bash getopt isn't gnu style aware, ie cmd opt1 file1 file2 opt2 +# will result in ignoring opt2 option +# +#============================================================================== +# +# Changelog: +# ---------- +# v1.0: original release +# v1.1: fix space usage (use pipe rather than temp file) +# v1.2: keep source file, not bz2 one if eof while decompressing +# v1.3: reduce used cpu time (decompressing only one time; +# source crc error 're detected through PIPESTATUS) +# v1.4: add zip support on popular^h^h^h^h^hGwenole request +# v1.5: +# - make zip method acting as z one (remove original file, +# keeping only smallest file, displaying size gain, ...) +# thus giving occasion to factorize some common code +# - check that the source file does exists +# - handle corrupted zip source file +# - comment the script and verbos-ize() some old changes +# - use cheaper shell tests +# - add GPL reference +# - update online help to reflect optional options and newer +# supported formats +# - remove dependency on sed by using ${1%old}new_extension +# v1.6: +# - print error message on stderr rather than on stdin +# - factorize/simplify zip method (fix erase temp files on bzip2ing +# error) +# - typo fixes +# - simplify for_each(file) loop +# - add "Know bugs" and TODO sections +# - add -h and -k options +# - if -k (keep) option is used, keep all files +# v1.7: - handle file names with spaces +# v1.8: +# - able to recompress rar files too +# - adapt for Fedora/RHEL +#============================================================================== +# +# +# TODO: +# - retrieve my patch for solaris file utils +# - add trap for zip method (is it really useful?) +# - add a man page +# - move bzme in its own package that requires tar too + + +# Defaults +force= +keep= + +# Corrupted source error message +src_err_msg () +{ if [ "$2" != 0 ]; then + echo "Corrupted source file ($1) !" 1>&2 + rm -f "$TARGET" + STATUS=1 + fi +} + +gz_compr () +{ zcat "$1" | bzip2 -9 > "$TARGET" + # Keep PIPESTATUS + MY_STATUS=( ${PIPESTATUS[*]} ) + src_err_msg "$1" ${MY_STATUS[0]} + if [[ "${MY_STATUS[1]}" != "0" ]]; then + echo "error while bziping !" 1>&2 + STATUS=1 + fi +} + +create_temp_dir () +{ + [[ -z "$TMPDIR" ]] && TMPDIR=$TMP + [[ -z "$TMPDIR" ]] && TMPDIR=~/tmp + MY_TMP=$(mktemp -d $TMPDIR/gzme.XXXXXX) +} + +rar_compr () +{ + create_temp_dir + (cd $MY_TMP; unrar x "$OLDPWD/$1") > /dev/null + src_err_msg "$1" $? + tar cfj "$TARGET" -C $MY_TMP . + if [[ $? != 0 ]]; then + echo "error while taring !" 1>&2 + STATUS=1 + fi + # Removing temporary files + rm -fr $MY_TMP +} + +zip_compr () +{ + create_temp_dir + unzip -qd $MY_TMP "$1" + src_err_msg "$1" $? + tar cfj "$TARGET" -C $MY_TMP . + if [[ $? != 0 ]]; then + echo "error while taring !" 1>&2 + STATUS=1 + fi + # Removing temporary files + rm -fr $MY_TMP +} + +compress () +{ echo -n "Compressing $1 ... " + if [[ ! -f "$1" ]]; then + echo "Source file doesn't exist" 1>&2 + return + fi + STATUS=0 + SIZE=$(du "$1"|cut -f 1 -d " ") + SIZE_o=$(du -b "$1"|cut -f 1 -d " ") + if [[ -f "$TARGET" ]]; then + if [[ -n $force ]];then + rm -f "$TARGET" + else + echo "$TARGET already exists !!" 1>&2 + echo "Use -f to force it" + return + fi + fi + # Do the real compression job + $METHOD "$1" + # if there was an error + if [[ $STATUS = 1 ]]; then + [[ -z $keep ]] && rm -f "$TARGET" + return + fi + # Compare size in order to only keep the smallest file + SIZE2=$(du "$TARGET"|cut -f 1 -d " ") + SIZE2_o=$(du -b "$TARGET"|cut -f 1 -d " ") + if [[ $SIZE_o -lt $SIZE2_o && -z $force_compress ]] + then + echo "=> $TARGET is bigger than $1 ($SIZE"kb" => $SIZE2"kb") !!!" + echo "Use -F to force the recompression" + [[ -z $keep ]] && rm -f "$TARGET" + else + echo "=> $TARGET ($SIZE"kb" => $SIZE2"kb")" + + [[ -z $keep ]] && rm -f "$1" + fi +} + +while getopts Ffhk opt; do + case "$opt" in + F) force_compress="yes";; + f) force="yes";; + k) keep="yes";; + h) + echo "Usage: bzme [-Ffhk] file.*.({,t}gz|Z|zip)" + exit 1;; + *) + echo "See bzme -h for usage" + exit 1;; + esac +done +shift $((OPTIND - 1)) + +echo keeping: $keep + +while [[ "$1" != "" ]] +do + #default method is gz,.Z,.z,.. + METHOD=gz_compr + case "$1" in + *.bz2) echo "$1: already compressed!"; shift;continue;; + *.tgz) TARGET=${1%.tgz}.tar.bz2;; + *.Z) TARGET=${1%.Z}.bz2;; + *.gz) TARGET=${1%.gz}.bz2;; + *.rar) + METHOD=rar_compr + TARGET=${1%.rar}.bz2 + ;; + *.zip) + METHOD=zip_compr + TARGET=${1%.zip}.tar.bz2 + ;; + *) echo "$1: unknown file extension => ignored"; shift; continue;; + esac + compress "$1" + shift +done diff --git a/bzme.1 b/bzme.1 new file mode 100644 index 0000000..cdf06ea --- /dev/null +++ b/bzme.1 @@ -0,0 +1,146 @@ +.PU +.TH bzip2 1 +.SH NAME +bzme \- recompress gziped, ziped, ... files into bzip2 + +.SH SYNOPSIS +.ll +8 +.B bzmz +.RB [ " \-fh " ] +[ +.I "filenames \&..." +] + +.SH DESCRIPTION +.I bzme +recompresses files using the Burrows-Wheeler block sorting text compression +algorithm, and Huffman coding. Compression is generally considerably better +than that achieved by more conventional LZ77/LZ78-based compressors, +and approaches the performance of the PPM family of statistical compressors. + +.I bzme +expects a list of file names to accompany the command-line flags. +Each file is replaced by a recompressed version of itself, with the name +as described in +.B "NEW NAMES" +section. + +.I bzme +won't overwrite by default existing files. If you want this to happen, specify +the \-f flag. + +.SH "NEW NAMES" +.I bzip2 +attempts to guess the filename for the decompressed file +from that of the compressed file as follows: + + filename.tgz becomes filename.tar.bz2 + filename.tar.gz becomes filename.tar.bz2 + filename.zip becomes filename.tar.bz2 + filename.z becomes filename.bz2 + filename.Z becomes filename.bz2 + filename.gz becomes filename.bz2 + +If the file does not end in one of the recognised endings, \fI.tgz\fP, + +or \fI.zip\fP, +.I bzme +complains that it cannot guess if the name of the recompressed file (ie it +doesn't detect the original name to be a file compressed in a known format) + +.SH OPTIONS +.TP +.B \-f +Force overwrite of output files, even if +.I -k +is used. Normally, +.I bzip2 +will not overwrite existing output files. + +.TP +.B \-k +Keep (don't delete) input files during compression +or decompression. +.".TP +.".B \-q --quiet +."Suppress non-essential warning messages. Messages pertaining to +."I/O errors and other critical events will not be suppressed. +.".TP +.".B \-v --verbose +."Verbose mode -- dysplay space gain (default) +.".TP +.".B \-L --license -V --version +."Display the software version, license terms and conditions. + +.SH SECURITY +.I bzme +will keep source file if there's an error while decompressing source file +or recompressing new file (or +.I -k +option is used of course). + +.I bzme +won't overwite the target file, even if +.I -k +option is used, if the source file doesn't exists. + +As a self-check for your protection, +.I bzip2 +uses 32-bit CRCs to make sure that the decompressed version of a file is +identical to the original. +.BR +This offers a better protection against corruption +of the compressed data than offered by gzip. + +.SH SPACE GAIN +Compression is only performed if the compressed file is smaller than the +original: the original file is only removed if the newly compressed file +is smaller, else the new recompressed file is deleted. + +Text (aka non binary) files're quite nearly always better compressed +by bzip2 rather than gzip. + +.SH MEMORY VS SPACE TRADEOFF +There're two things : +.TP +.B Consumed CPU time +The needed cpu time is reduced by decompressing only one time. +Files to recompress were compressed through compress or gzip, used to be +decompressed by gunzip -t in order to check that the original file was ok. +This resulted in passing two times the data in the decompression process +(one to check integrity, one to recompress). +temporary space usage will be zero since bzme will use a pipe +rather than a temporary file as it does in the early ages. +Source error're detected through bash PIPESTATUS feature. +.TP +.B Occupied space +While recompressing files, if they were compressed through compress or gzip, +temporary space usage will be zero since bzme will use a pipe +rather than a temporary file as it did in the early ages. +Source error're detected through bash PIPESTATUS feature. +Zip files're still fully decompressed on disk. + +As for the recompressed file and original file, only the smallest file +is kept. + +.SH RETURN VALUES +0 for a normal exit. +1 will be returned if an unknown option is passed. + +.SH BUGS +Bash getopt (which is used to analyse options) isn't gnu style aware, ie cmd +opt1 file1 file2 opt2 will result in ignoring opt2 option. + +Solaris/SunOs du doesn't supports gnu option, and thus, bzme won't +work on those OSes unless GNU fileutils got installed. +.BR +I had once a day patched bzme to use right options for solaris but i had +lost my changes. +.LP +So solaris remains unsupported. + +.SH "SEE ALSO" +bzip2(1), bunzip2(1) + +.SH AUTHOR +Thierry Vignaud , 1999-2002