##// END OF EJS Templates
hgmerge: add cleanup functions...
hgmerge: add cleanup functions This patch adds functions cleanup, success and failure. The last two of these should be used instead of exit. Current code was changed to use them. It also moves $HGTMP to the top of the file (it's used in the cleanup function), changes the comment and removes now unneeded trap in the diff+patch merge.

File last commit:

r1700:e2f91e0a default
r1700:e2f91e0a default
Show More
hgmerge
170 lines | 4.1 KiB | text/plain | TextLexer
Thomas Arendsen Hein
Remove bashisms and use /bin/sh instead of /bin/bash....
r544 #!/bin/sh
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 #
# 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
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 LOCAL="$1"
BASE="$2"
OTHER="$3"
mpm@selenic.com
Replace tkmerge with hgmerge...
r240
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 if [ -z "$EDITOR" ]; then
EDITOR="vi"
fi
Thomas Arendsen Hein
Use vi if $EDITOR is unset.
r304
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 # find decent versions of our utilities, insisting on the GNU versions where we
# need to
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 MERGE=merge
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 DIFF3=gdiff3
DIFF=gdiff
PATCH=gpatch
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 type $MERGE >/dev/null 2>&1 || MERGE=
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 type $DIFF3 >/dev/null 2>&1 || DIFF3=diff3
type $DIFF >/dev/null 2>&1 || DIFF=diff
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 type $PATCH >/dev/null 2>&1 || PATCH=patch
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 $DIFF3 --version >/dev/null 2>&1 || DIFF3=
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 # find optional visual utilities
FILEMERGE='/Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge'
KDIFF3=kdiff3
TKDIFF=tkdiff
type $FILEMERGE >/dev/null 2>&1 || FILEMERGE=
type $KDIFF3 >/dev/null 2>&1 || KDIFF3=
type $TKDIFF >/dev/null 2>&1 || TKDIFF=
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 # temporary directory for diff+patch merge
HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
# put all your required cleanup here
cleanup() {
rm -f "$LOCAL.orig"
rm -rf "$HGTMP"
}
# functions concerning program exit
success() {
cleanup
exit 0
}
failure() {
echo "merge failed" 1>&2
cp "$LOCAL.orig" "$LOCAL"
cleanup
exit 1
}
# Clean up when interrupted
trap "failure" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 # Back up our file
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 cp "$LOCAL" "$LOCAL.orig"
mpm@selenic.com
Replace tkmerge with hgmerge...
r240
# Attempt to do a non-interactive merge
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$MERGE" ]; then
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 $MERGE "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && success
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 cp "$LOCAL.orig" "$LOCAL"
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 elif [ -n "$DIFF3" ]; then
echo $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && success
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 if [ $? -eq 2 ]; then
echo "$DIFF3 failed! Exiting." 1>&2
cp "$LOCAL.orig" "$LOCAL"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 fi
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 cp "$LOCAL.orig" "$LOCAL"
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Brendan Cully
Safer version of FileMerge merge
r1664 # on MacOS X try FileMerge.app, shipped with Apple's developer tools
# TODO: make proper temp files. foo.orig and foo.link are dangerous
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699
if [ -n "$FILEMERGE" ]; then
Brendan Cully
Safer version of FileMerge merge
r1664 cp "$LOCAL.orig" "$LOCAL"
ln "$LOCAL" "$LOCAL.link"
# filemerge prefers the right by default
if ! "$FILEMERGE" -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
then
echo "FileMerge failed to launch"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
Brendan Cully
Safer version of FileMerge merge
r1664 fi
if ! test "$LOCAL" -ef "$LOCAL.link"
then
rm "$LOCAL.orig" "$LOCAL.link"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 success
Brendan Cully
Safer version of FileMerge merge
r1664 else
rm "$LOCAL.link"
echo "$LOCAL is unchanged. Was the merge successful?"
select answer in yes no
do
if test "$answer" == "yes"
then
rm "$LOCAL.orig"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 success
Brendan Cully
Safer version of FileMerge merge
r1664 else
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
Brendan Cully
Safer version of FileMerge merge
r1664 fi
done
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
Brendan Cully
Safer version of FileMerge merge
r1664 fi
Christian Ebert
Use of opendiff as merge program on MacOS X...
r1647 fi
Thomas Arendsen Hein
Check if $DISPLAY is set before using tkdiff or kdiff3.
r303 if [ -n "$DISPLAY" ]; then
# try using kdiff3, which is fairly nice
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$KDIFF3" ]; then
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 $KDIFF3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || failure
success
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Thomas Arendsen Hein
Check if $DISPLAY is set before using tkdiff or kdiff3.
r303 # try using tkdiff, which is a bit less sophisticated
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$TKDIFF" ]; then
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 $TKDIFF "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || failure
success
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
fi
# Attempt to do a merge with $EDITOR
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$MERGE" ]; then
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 echo "conflicts detected in $LOCAL"
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 $MERGE "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 success
mpm@selenic.com
hgmerge: use diff3 if available...
r242 fi
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 if [ -n "$DIFF3" ]; then
mpm@selenic.com
hgmerge: use diff3 if available...
r242 echo "conflicts detected in $LOCAL"
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || {
case $? in
1)
$EDITOR "$LOCAL" ;;
2) echo "$DIFF3 failed! Exiting." 1>&2
cp "$LOCAL.orig" "$LOCAL"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure ;;
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 esac
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 success
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 }
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
# attempt to manually merge with diff and patch
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 if [ -n "$DIFF" -a -n "$PATCH" ]; then
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795
Thomas Arendsen Hein
Shortened hgmerge a little bit.
r829 (umask 077 && mkdir "$HGTMP") || {
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 echo "Could not create temporary directory $HGTMP" 1>&2
failure
Thomas Arendsen Hein
Shortened hgmerge a little bit.
r829 }
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || :
if $PATCH "$LOCAL" < "$HGTMP/diff"; then
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 success
Thomas Arendsen Hein
Shortened hgmerge a little bit.
r829 else
Thomas Arendsen Hein
If rejects are empty after using the editor, merge with diff+patch was ok.
r830 # If rejects are empty after using the editor, merge was ok
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || success
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure