240
|
1 #!/bin/bash
|
|
2 #
|
|
3 # hgmerge - default merge helper for Mercurial
|
|
4 #
|
|
5 # This tries to find a way to do three-way merge on the current system.
|
|
6 # The result ought to end up in $1.
|
|
7
|
|
8 set -e # bail out quickly on failure
|
|
9
|
|
10 LOCAL=$1
|
|
11 BASE=$2
|
|
12 OTHER=$3
|
|
13
|
|
14 # Back up our file
|
|
15 cp $LOCAL $LOCAL.orig
|
|
16
|
|
17 # Attempt to do a non-interactive merge
|
|
18 if which merge > /dev/null ; then
|
|
19 if merge $LOCAL $BASE $OTHER 2> /dev/null; then
|
|
20 # success!
|
|
21 exit 0
|
|
22 fi
|
|
23 cp $LOCAL.orig $LOCAL
|
|
24 fi
|
|
25
|
|
26 # try using kdiff3, which is fairly nice
|
|
27 if which kdiff3 > /dev/null ; then
|
|
28 if kdiff3 --auto $BASE $LOCAL $OTHER -o $LOCAL ; then
|
|
29 exit 0
|
|
30 else
|
|
31 exit 1
|
|
32 fi
|
|
33 fi
|
|
34
|
|
35 # try using tkdiff, which is a bit less sophisticated
|
|
36 if which tkdiff > /dev/null ; then
|
|
37 if tkdiff $LOCAL $OTHER -a $BASE -o $LOCAL ; then
|
|
38 exit 0
|
|
39 else
|
|
40 exit 1
|
|
41 fi
|
|
42 fi
|
|
43
|
|
44 # Attempt to do a merge with $EDITOR
|
|
45 if which merge > /dev/null ; then
|
|
46 echo "conflicts detected in $LOCAL"
|
|
47 merge $LOCAL $BASE $OTHER 2>/dev/null || $EDITOR $LOCAL
|
|
48 fi
|
|
49
|
|
50 # attempt to manually merge with diff and patch
|
|
51 if which diff > /dev/null ; then
|
|
52 if which patch > /dev/null ; then
|
|
53 T=`mktemp`
|
|
54 diff -u $BASE $OTHER > $T
|
|
55 if patch $LOCAL < $T ; then
|
|
56 exit 0
|
|
57 else
|
|
58 $EDITOR $LOCAL $LOCAL.rej
|
|
59 fi
|
|
60 rm $T
|
|
61 exit 1
|
|
62 fi
|
|
63 fi
|
|
64
|
|
65 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
|
|
66 exit 1
|
|
67
|
|
68
|