forked from lix-project/lix
60 lines
1.2 KiB
Bash
Executable file
60 lines
1.2 KiB
Bash
Executable file
#! /bin/sh -e
|
|
|
|
#DIFF=zdc
|
|
DIFF=bsdiff
|
|
|
|
srcA=$1
|
|
srcB=$2
|
|
|
|
if test -z "$srcA" -o -z "$srcB"; then
|
|
echo "syntax: bdiff.sh srcA srcB"
|
|
exit 1
|
|
fi
|
|
|
|
(cd $srcB && find . -type f) | while read fn; do
|
|
|
|
if test -f "$srcA/$fn"; then
|
|
|
|
if ! test -f "$srcB/$fn"; then
|
|
echo "DELETE $fn"
|
|
else
|
|
|
|
if ! cmp "$srcA/$fn" "$srcB/$fn" > /dev/null; then
|
|
|
|
echo "FILE DELTA FOR $fn"
|
|
|
|
TMPFILE=/tmp/__bsdiff
|
|
$DIFF "$srcA/$fn" "$srcB/$fn" $TMPFILE
|
|
cat $TMPFILE
|
|
|
|
diffSize=$(stat -c '%s' $TMPFILE)
|
|
|
|
# For comparison.
|
|
bzipSize=$(bzip2 < "$srcB/$fn" | wc -m)
|
|
|
|
gain=$(echo "scale=2; ($diffSize - $bzipSize) / $bzipSize * 100" | bc)
|
|
|
|
ouch=$(if test "${gain:0:1}" != "-"; then echo "!"; fi)
|
|
|
|
printf "%7.2f %1s %10d %10d %s\n" \
|
|
"$gain" "$ouch" "$diffSize" "$bzipSize" "$fn" >&2
|
|
# echo "$fn -> $diffSize $bzipSize ==> $gain $ouch" >&2
|
|
|
|
rm $TMPFILE
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# Note: be silent about unchanged files.
|
|
|
|
else
|
|
|
|
echo "NEW FILE $fn"
|
|
|
|
cat "$srcB/$fn"
|
|
|
|
fi
|
|
|
|
done
|