Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 96 lines (85 sloc) 1.82 KB
#!/bin/sh
#
# Wrapper script to use FileMerge as a diff3-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
-m)
merged=1
;;
-E)
notall=1
;;
-L)
shift
if [ -z "$rightlabel" ]; then
rightlabel=$1
elif [ -z "$ancestorlabel" ]; then
ancestorlabel=$1
elif [ -z "$leftlabel" ]; then
leftlabel=$1
else
echo "Too many labels" 1>&2
exit 2
fi
;;
-*)
echo "Unknown option: $1" 1>&2
exit 1
;;
*)
if [ -z "$rightfile" ]; then
rightfile=$1
elif [ -z "$ancestorfile" ]; then
ancestorfile=$1
elif [ -z "$leftfile" ]; then
leftfile=$1
else
echo "Too many files to diff" 1>&2
exit 2
fi
esac
shift
done
if [ -z "$rightfile" ] || [ -z "$ancestorfile" ] || [ -z "$leftfile" ]; then
echo "Usage: $FMDIFF [options] myfile oldfile yourfile" 1>&2
exit 2
fi
if [ -z "$merged" ]; then
echo "Can only output merged file (need -m option)" 1>&2
exit 2
fi
mergefile=`mktemp -t $FMDIFF`
function labels {
[ -n "$ancestorlabel" ] && echo Ancestor: $ancestorlabel
[ -n "$leftlabel" ] && echo Left: $leftlabel
[ -n "$rightlabel" ] && echo Right: $rightlabel
}
echo Starting FileMerge... 1>&2
labels 1>&2
if [ -x "$GN" ]; then
labels | "$GN" -a FileMerge -n "$FMDIFF" "Starting FileMerge"
fi
[[ "$mergefile" == */* ]] || mergefile="./$mergefile"
tempfile=`mktemp -t $FMDIFF`
"$FM" -left "$leftfile" -right "$rightfile" \
-ancestor "$ancestorfile" -merge "$mergefile"
if [ "$mergefile" -nt "$tempfile" ]; then
rm "$tempfile"
cat "$mergefile"
rm "$mergefile"
exit 0
else
rm "$tempfile"
rm "$mergefile"
exit 1
fi