equal
deleted
inserted
replaced
|
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 |