#!/bin/bash

NAME=$1

USE_SVN=0
USE_GIT=0

dump_vc_diff() {
    if [ ${USE_GIT} = 1 ]; then
        git diff
    else
        if [ ${USE_SVN} = 1 ]; then
            svn diff
        else
            echo "Unknown/No version control"
        fi
    fi
}

generatePatches() {
    cd $ARBHOME
    PATCHDIR=./patches.arb
    mkdir -p $PATCHDIR
    DATE=`date '+%Y%m%d_%H%M%S'`
    PATCHNAME=${NAME}_$DATE
    PATCH=$PATCHDIR/$PATCHNAME.patch
    FAKEPATCH=$PATCHDIR/fake.patch
    LASTPATCH=$PATCHDIR/last.patch

    dump_vc_diff > $PATCH.tmp ; mv $PATCH.tmp $PATCH

    if [ -e $PATCH ]; then
        if [ ! -s $PATCH ]; then
            rm $PATCH
            if [ ! -e $FAKEPATCH ]; then
                echo "Index: No changes" > $FAKEPATCH
                echo "===================================================================" >> $FAKEPATCH
            fi
            ln --force $FAKEPATCH $LASTPATCH
            touch $FAKEPATCH
            echo "No patch generated (no diff)"
        else
            DIFF=1
            if [ -e $LASTPATCH ]; then
                DIFF=`diff $PATCH $LASTPATCH | wc -l`
            fi

            if [ $DIFF = 0 ]; then
                echo "No patch generated (same as last patch)"
                rm $PATCH
            else
                ln --force $PATCH $LASTPATCH
                ls -hog $PATCH
            fi
        fi
    fi
}

if [ -z "$NAME" ]; then
    echo "Usage: arb_create_patch.sh name [--svn]"
    echo "--svn       force svn diff"
    false
else
    shift
    PREFER_SVN=0
    while [ -n "$1" ]; do
        if [ "$1" = "--svn" ]; then
            PREFER_SVN=1
            shift
        fi
    done

    if [ ! -d "$ARBHOME" ]; then
        echo "No patch created (ARBHOME undefined)"
    else
        if [ -d $ARBHOME/.git ] && [ ${PREFER_SVN} = 0 ]; then
            USE_GIT=1
            generatePatches
        else
            if [ -d $ARBHOME/.svn ]; then
                USE_SVN=1
                generatePatches
            else
                echo "No patch created (neighter SVN nor GIT checkout in ARBHOME)"
            fi
        fi
    fi
fi

