#!/bin/sh
#---------------------------------------------------------------
# Project         : Mandriva Linux
# Module          : rpm-rebuilder
# File            : diffsrcrpm
# Version         : $Id: diffsrcrpm,v 1.1 2005/09/11 00:10:54 flepied Exp $
# Author          : Frederic Lepied
# Created On      : Tue Apr  9 14:14:45 2002
#---------------------------------------------------------------

set -e

if [ $# != 2 ]; then
    echo "usage: `basename $0` <old> <new>" 1>&2
    exit 1
fi

TMPDIR=${TMPDIR=/tmp}

old=`basename $1`
new=`basename $2`

base="`basename $0`"
tempdir=`mktemp -d "$TMPDIR/$base.XXXXXX"`
mkdir -p $tempdir/{$old,$new}

function clean() {
    rm -rf $tempdir
}

function simplediff() {
    f="$1"
    diff -u --minimal $old/$f $new/$f > $tempdir/dif
    s=`ls -o $tempdir/dif | awk '{print $4;}'`
    if [ "$s" -gt 20000 ] ;then
	diffstat $tempdir/dif
    else
	cat $tempdir/dif
    fi
}

trap clean 0

rpm2cpio $1 | (cd $tempdir/$old; cpio -id 2> /dev/null)
rpm2cpio $2 | (cd $tempdir/$new; cpio -id 2> /dev/null)

set +e

cd $tempdir/$old; bunzip2 *.bz2 2> /dev/null; gunzip *.gz 2> /dev/null; ls > ../lst
cd $tempdir/$new; bunzip2 *.bz2 2> /dev/null; gunzip *.gz 2> /dev/null; ls >> ../lst
cd ..

CHANGED=
for f in `sort < lst | uniq`; do
    if [ ! -f $old/$f ]; then
        echo "$f added"
    elif [ ! -f $new/$f ]; then
        echo "$f removed"
    else
        cmp $old/$f $new/$f > /dev/null || echo "$f changed" && CHANGED="$CHANGED $f"
    fi
done

for f in $CHANGED; do
    case $f in
        *.tar|*.jpg|*.xpm)
            ;;
        *.patch|*.diff)
            interdiff $old/$f $new/$f 2>/dev/null || simplediff $f;;
        *)
            simplediff $f;;
    esac
done

# diffsrcrpm ends here
