mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 15:57:43 +03:00
51ae3ccedf
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Remove bashisms and use /bin/sh instead of /bin/bash. manifest hash: 25560e04ff8ac33a6d8b82d2328b4e90578bee4c -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFCxOEjW7P1GVgWeRoRAm9XAJ9IjlbMerPYEhKQQu7Ufcm6630cDwCfdXJ3 865XH6YVMuCYNjf3eibwQaM= =r3gh -----END PGP SIGNATURE-----
84 lines
1.7 KiB
Bash
Executable File
84 lines
1.7 KiB
Bash
Executable File
#!/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
|
|
|
|
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
|