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

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)
	    if type interdiff > /dev/null 2>&1; then
		interdiff $old/$f $new/$f
	    else
		diff -u --minimal $old/$f $new/$f
	    fi
            ;;
        *)
            diff -u --minimal $old/$f $new/$f > $tempdir/dif
            s=`ls -o $tempdir/dif | awk '{print $4;}'`
            if [ "$s" -gt 20000 ] && type diffstat > /dev/null 2>&1;then
                diffstat $tempdir/dif
            else
                cat $tempdir/dif
            fi
            ;;
    esac
done

# diffsrcrpm ends here
