Mercurial > hg
view hgmerge @ 798:c28f9feb7c2e
Make tests work on Solaris:
- replacement for mktemp
- fall back if shell arithmetic doesn't work
- replacement for 'set -x' (which results look different with some shells)
- "FOO=bar; export FOO" instead of "export FOO=bar"
- don't use 'if ! ...'
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 29 Jul 2005 15:11:05 +0100 |
parents | cd0ad12d9e42 |
children | 8f5637f0a0c0 |
line wrap: on
line source
#!/bin/sh # # hgmerge - default merge helper for Mercurial # # This tries to find a way to do three-way merge on the current system. # The result ought to end up in $1. set -e # bail out quickly on failure LOCAL="$1" BASE="$2" OTHER="$3" if [ -z "$EDITOR" ]; then EDITOR="vi" fi # Back up our file cp "$LOCAL" "$LOCAL.orig" # Attempt to do a non-interactive merge if type merge > /dev/null ; then if merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null; then # success! exit 0 fi cp "$LOCAL.orig" "$LOCAL" elif type diff3 > /dev/null ; then if diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" ; then # success exit 0 fi cp "$LOCAL.orig" "$LOCAL" fi if [ -n "$DISPLAY" ]; then # try using kdiff3, which is fairly nice if type kdiff3 > /dev/null ; then if kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" ; then exit 0 else exit 1 fi fi # try using tkdiff, which is a bit less sophisticated if type tkdiff > /dev/null ; then if tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" ; then exit 0 else exit 1 fi fi fi # Attempt to do a merge with $EDITOR if type merge > /dev/null ; then echo "conflicts detected in $LOCAL" merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL" exit 0 fi if type diff3 > /dev/null ; then echo "conflicts detected in $LOCAL" diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL" exit 0 fi HGTMP="" cleanup_exit() { rm -rf "$HGTMP" exit $1 } # attempt to manually merge with diff and patch if type diff > /dev/null ; then if type patch > /dev/null ; then # Remove temporary files even if we get interrupted trap "cleanup_exit 1" TERM KILL INT QUIT ABRT HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$" (umask 077 && mkdir "$HGTMP") || { echo "Could not create temporary directory! Exiting." 1>&2 exit 1 } diff -u "$BASE" "$OTHER" > "$HGTMP/diff" if patch "$LOCAL" < "$HGTMP/diff" ; then cleanup_exit 0 else $EDITOR "$LOCAL" "$LOCAL.rej" fi cleanup_exit 1 fi fi echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!" exit 1