Mercurial > hg
view hgmerge @ 503:c6a2e41c8c60
Fix troubles with clone and exception handling
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Fix troubles with clone and exception handling
Clone deletes its directory on failure
This was deleting the lockfile out from under the lock object before
it got destroyed
This patch shuts lock up and makes the cleanup code for clone a little
cleaner.
manifest hash: f666fddcf6f3a905020a091f5e9fd2cb5d806cdd
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCwSGOywK+sNU5EO8RAkx2AKCIxPczl9YWnuUM+bMQnpVr8kv6uQCeNWld
SUxSB99PGJHhq1LWFaSJJNw=
=Frk/
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Tue, 28 Jun 2005 02:08:14 -0800 |
parents | f06a4a3b86a7 |
children | 3d4d5f2aba9a 4fc63e22b1fe |
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 EDITOR="${EDITOR:-vi}" # 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 if [ -n "$DISPLAY" ]; then # 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 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