#!/bin/sh # # Wrapper script to use FileMerge as a diff-cmd in Subversion # FM="$(which filemerge)" FMDIFF="$(basename $0)" GN="/usr/local/bin/growlnotify" # Resolve symlinks leading to FileMerge while [ -L "$FM" ]; do FM_DIR="$(dirname "$FM")" FM="$(readlink "$FM")" [[ $FM == /* ]] || FM="$FM_DIR/$FM" done while [ $# != 0 ]; do case $1 in -u) unified=1 ;; -L) shift if [ -z "$leftlabel" ]; then leftlabel=$1 elif [ -z "$rightlabel" ]; then rightlabel=$1 else echo "Too many labels" 1>&2 exit 2 fi ;; -*) echo "Unknown option: $1" 1>&2 exit 2 ;; *) if [ -z "$leftfile" ]; then leftfile=$1 elif [ -z "$rightfile" ]; then rightfile=$1 else echo "Too many files to diff" 1>&2 exit 2 fi esac shift done if [ -z "$leftfile" ] || [ -z "$rightfile" ]; then echo "Usage: $FMDIFF [options] leftfile rightfile" 1>&2 exit 2 fi if svn info "$rightfile" &>/dev/null; then mergefile="$rightfile" fi function labels { [ -n "$leftlabel" ] && echo Left: $leftlabel [ -n "$rightlabel" ] && echo Right: $rightlabel [ -n "$mergefile" ] && echo Merge: $mergefile } echo Starting FileMerge... 1>&2 labels 1>&2 if [ -x "$GN" ]; then labels | "$GN" -a FileMerge -n "$FMDIFF" "Starting FileMerge" fi if [ -n "$mergefile" ]; then [[ "$mergefile" == */* ]] || mergefile="./$mergefile" exec "$FM" -left "$leftfile" -right "$rightfile" \ -ancestor "$leftfile" -merge "$mergefile" else exec "$FM" -left "$leftfile" -right "$rightfile" fi