view hgmerge @ 286:bd9d1e93f8d6

hg pull: ditch .hgpaths for new .hgrc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 hg pull: ditch .hgpaths for new .hgrc The format is like this: [paths] main = http://selenic.com/hg hgweb = http://edge2.net/hg/hgweb/ hgdoc = http://edge2.net/hg/man/ manifest hash: fc99889443381bdecc223f09ee65a74a8d5952c1 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCp3VKywK+sNU5EO8RAsbfAKCrzNh2yKI0KF9qCzHPz7eXjx688wCeKmIL RXfAOuycKOTVJU6oFnBbBBo= =OjMb -----END PGP SIGNATURE-----
author mpm@selenic.com
date Wed, 08 Jun 2005 14:46:34 -0800
parents a69c3b2957d1
children 15a9e55e7ea5 f06a4a3b86a7
line wrap: on
line source

#!/bin/bash
#
# 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

# Back up our file
cp $LOCAL $LOCAL.orig

# Attempt to do a non-interactive merge
if which merge > /dev/null ; then
    if merge $LOCAL $BASE $OTHER 2> /dev/null; then
	# success!
	exit 0
    fi
    cp $LOCAL.orig $LOCAL
elif which diff3 > /dev/null ; then
    if diff3 -m $LOCAL.orig $BASE $OTHER > $LOCAL ; then
	# success
	exit 0
    fi
    cp $LOCAL.orig $LOCAL
fi

# try using kdiff3, which is fairly nice
if which 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 which tkdiff > /dev/null ; then
    if tkdiff $LOCAL $OTHER -a $BASE -o $LOCAL ; then
	exit 0
    else
	exit 1
    fi
fi

# Attempt to do a merge with $EDITOR
if which merge > /dev/null ; then
    echo "conflicts detected in $LOCAL"
    merge $LOCAL $BASE $OTHER 2>/dev/null || $EDITOR $LOCAL
    exit 0
fi

if which diff3 > /dev/null ; then
    echo "conflicts detected in $LOCAL"
    diff3 -m $LOCAL.orig $BASE $OTHER > $LOCAL || $EDITOR $LOCAL
    exit 0
fi

# attempt to manually merge with diff and patch
if which diff > /dev/null ; then
    if which patch > /dev/null ; then
	T=`mktemp`
	diff -u $BASE $OTHER > $T
	if patch $LOCAL < $T ; then
	    exit 0
	else
	    $EDITOR $LOCAL $LOCAL.rej
	fi
	rm $T
	exit 1
    fi
fi

echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
exit 1