Mercurial > hg > mercurial-crew-with-dirclash
comparison hgmerge @ 836:1fe3b14c7044
Merge with TAH
author | mpm@selenic.com |
---|---|
date | Thu, 04 Aug 2005 13:27:41 -0800 |
parents | 0902ffece4b4 232d0616a80a |
children | 9c918287d10b |
comparison
equal
deleted
inserted
replaced
827:a61728b58dc0 | 836:1fe3b14c7044 |
---|---|
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 ; 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 ; 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 ; 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 ; 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 ; 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 ; 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 | |
73 } | 60 } |
74 | 61 |
75 # attempt to manually merge with diff and patch | 62 # attempt to manually merge with diff and patch |
76 if type diff > /dev/null ; then | 63 if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then |
77 if type patch > /dev/null ; then | 64 # Remove temporary files even if we get interrupted |
78 # Remove temporary files even if we get interrupted | 65 trap "cleanup_exit" 0 # normal exit |
79 trap "cleanup_exit 1" TERM KILL INT QUIT ABRT | 66 trap "exit 1" 1 2 3 6 15 # HUP INT QUIT ABRT TERM |
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 exit 0 |
90 else | 77 else |
91 $EDITOR "$LOCAL" "$LOCAL.rej" | 78 # If rejects are empty after using the editor, merge was ok |
92 fi | 79 $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0 |
93 cleanup_exit 1 | |
94 fi | 80 fi |
81 exit 1 | |
95 fi | 82 fi |
96 | 83 |
97 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!" | 84 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!" |
98 exit 1 | 85 exit 1 |