export SVN_MERGE=vimdiff

svnfilerevisions()
{
    svn log -q "$1" | sed -n 's/^r\([0-9][0-9]*\)[ \t].*/\1/gp' | tr '\n' ' '
    echo
}

svnfilegrep()
{
    file="$1"; shift
    for i in `svnfilerevisions "$file"`
    do
        echo -n "$i: "
        svn cat -r $i "$file" | grep $@
    done
    echo
}

svnvimdiff()
{
    opt1=""
    opt2=""
    [ "$1" == "-r" ] && { opt1="-r $2"; shift; shift; }
    [ "$1" == "-r" ] && { opt2="-r $2"; shift; shift; }

    if [ $# -gt 0 ]; then
        files=$@
    else
        [ -n "$opt2" ] && { echo "Such diff is not supported, and probably won't be"; return 1; }
        files="`svn st | grep "^M" | awk '{print $2}'`"
    fi

    tmpdir="`mktemp -d /tmp/svnvimdiff.XX`"
    mkdir -p "$tmpdir"
    for fpath in $files
    do
        fname="`basename "$fpath"`"
        svn cat $opt1 "$fpath" > "$tmpdir/$fname"
        if [ -z "$opt2" ]; then
            vim -d "$tmpdir/$fname" "$fpath"
        else
            svn cat $opt2 "$fpath" > "$tmpdir/_$fname"
            vim -d "$tmpdir/$fname" "$tmpdir/_$fname"
        fi
    done
    rm -fr "$tmpdir"
}
