##// END OF EJS Templates
Shortened hgmerge a little bit.
Thomas Arendsen Hein -
r829:764b0350 default
parent child Browse files
Show More
@@ -1,98 +1,84 b''
1 #!/bin/sh
1 #!/bin/sh
2 #
2 #
3 # hgmerge - default merge helper for Mercurial
3 # hgmerge - default merge helper for Mercurial
4 #
4 #
5 # This tries to find a way to do three-way merge on the current system.
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.
6 # The result ought to end up in $1.
7
7
8 set -e # bail out quickly on failure
8 set -e # bail out quickly on failure
9
9
10 LOCAL="$1"
10 LOCAL="$1"
11 BASE="$2"
11 BASE="$2"
12 OTHER="$3"
12 OTHER="$3"
13
13
14 if [ -z "$EDITOR" ]; then
14 if [ -z "$EDITOR" ]; then
15 EDITOR="vi"
15 EDITOR="vi"
16 fi
16 fi
17
17
18 # Back up our file
18 # Back up our file
19 cp "$LOCAL" "$LOCAL.orig"
19 cp "$LOCAL" "$LOCAL.orig"
20
20
21 # Attempt to do a non-interactive merge
21 # Attempt to do a non-interactive merge
22 if type merge > /dev/null 2>&1; then
22 if type merge > /dev/null 2>&1; then
23 if merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null; then
23 merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0
24 # success!
25 exit 0
26 fi
27 cp "$LOCAL.orig" "$LOCAL"
24 cp "$LOCAL.orig" "$LOCAL"
28 elif type diff3 > /dev/null 2>&1; then
25 elif type diff3 > /dev/null 2>&1; then
29 if diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" ; then
26 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0
30 # success
31 exit 0
32 fi
33 cp "$LOCAL.orig" "$LOCAL"
27 cp "$LOCAL.orig" "$LOCAL"
34 fi
28 fi
35
29
36 if [ -n "$DISPLAY" ]; then
30 if [ -n "$DISPLAY" ]; then
37 # try using kdiff3, which is fairly nice
31 # try using kdiff3, which is fairly nice
38 if type kdiff3 > /dev/null 2>&1; then
32 if type kdiff3 > /dev/null 2>&1; then
39 if kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" ; then
33 kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || exit 1
40 exit 0
34 exit 0
41 else
42 exit 1
43 fi
44 fi
35 fi
45
36
46 # try using tkdiff, which is a bit less sophisticated
37 # try using tkdiff, which is a bit less sophisticated
47 if type tkdiff > /dev/null 2>&1; then
38 if type tkdiff > /dev/null 2>&1; then
48 if tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" ; then
39 tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || exit 1
49 exit 0
40 exit 0
50 else
51 exit 1
52 fi
53 fi
41 fi
54 fi
42 fi
55
43
56 # Attempt to do a merge with $EDITOR
44 # Attempt to do a merge with $EDITOR
57 if type merge > /dev/null 2>&1; then
45 if type merge > /dev/null 2>&1; then
58 echo "conflicts detected in $LOCAL"
46 echo "conflicts detected in $LOCAL"
59 merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL"
47 merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL"
60 exit 0
48 exit 0
61 fi
49 fi
62
50
63 if type diff3 > /dev/null 2>&1; then
51 if type diff3 > /dev/null 2>&1; then
64 echo "conflicts detected in $LOCAL"
52 echo "conflicts detected in $LOCAL"
65 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL"
53 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL"
66 exit 0
54 exit 0
67 fi
55 fi
68
56
69 HGTMP=""
57 HGTMP=""
70 cleanup_exit() {
58 cleanup_exit() {
71 rm -rf "$HGTMP"
59 rm -rf "$HGTMP"
72 exit $1
60 exit $1
73 }
61 }
74
62
75 # attempt to manually merge with diff and patch
63 # attempt to manually merge with diff and patch
76 if type diff > /dev/null 2>&1; then
64 if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then
77 if type patch > /dev/null 2>&1; then
78 # Remove temporary files even if we get interrupted
65 # Remove temporary files even if we get interrupted
79 trap "cleanup_exit 1" TERM KILL INT QUIT ABRT
66 trap "cleanup_exit 1" TERM KILL INT QUIT ABRT
80
67
81 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
68 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
82 (umask 077 && mkdir "$HGTMP") || {
69 (umask 077 && mkdir "$HGTMP") || {
83 echo "Could not create temporary directory! Exiting." 1>&2
70 echo "Could not create temporary directory! Exiting." 1>&2
84 exit 1
71 exit 1
85 }
72 }
86
73
87 diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
74 diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
88 if patch "$LOCAL" < "$HGTMP/diff" ; then
75 if patch "$LOCAL" < "$HGTMP/diff"; then
89 cleanup_exit 0
76 cleanup_exit 0
90 else
77 else
91 $EDITOR "$LOCAL" "$LOCAL.rej"
78 $EDITOR "$LOCAL" "$LOCAL.rej"
92 fi
79 fi
93 cleanup_exit 1
80 cleanup_exit 1
94 fi
81 fi
95 fi
96
82
97 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
83 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
98 exit 1
84 exit 1
General Comments 0
You need to be logged in to leave comments. Login now