about summary refs log blame commit diff
path: root/patch/bdiff.sh
blob: 1a438152946845bdc25d024e69f4bf17b4847661 (plain) (tree)
1
2
3
4

             

           










                                                

                                


                                      
 


                                                              
 


                                                      
 
                                                 
 

                                                       
 
                                                                                      
 



                                                                       

                                                               






                                                









                           
#! /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