Mercurial > hg
comparison hgmerge @ 1434:696851b1bba9
Fix use of diff(1) triggered by set -e.
Search harder for a decent diff/patch to use.
author | levon@movementarian.org |
---|---|
date | Mon, 24 Oct 2005 14:55:53 -0700 |
parents | 9c918287d10b |
children | 64a1169c927d |
comparison
equal
deleted
inserted
replaced
1433:70a3b6a505c6 | 1434:696851b1bba9 |
---|---|
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 # find decent versions of our utilities, insisting on the GNU versions where we | |
19 # need to | |
20 DIFF3=gdiff3 | |
21 DIFF=gdiff | |
22 PATCH=gpatch | |
23 | |
24 type $DIFF3 >/dev/null 2>&1 || DIFF3=diff3 | |
25 type $DIFF >/dev/null 2>&1 || DIFF=diff | |
26 type $PATCH >/dev/null 2>&1 || PATCH=patch | |
27 $DIFF3 --version >/dev/null 2>&1 || DIFF3= | |
28 | |
18 # Back up our file | 29 # Back up our file |
19 cp "$LOCAL" "$LOCAL.orig" | 30 cp "$LOCAL" "$LOCAL.orig" |
20 | 31 |
21 # Attempt to do a non-interactive merge | 32 # Attempt to do a non-interactive merge |
22 if type merge > /dev/null 2>&1; then | 33 if type merge > /dev/null 2>&1; then |
23 merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0 | 34 merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0 |
24 cp "$LOCAL.orig" "$LOCAL" | 35 cp "$LOCAL.orig" "$LOCAL" |
25 elif type diff3 > /dev/null 2>&1; then | 36 elif [ -n "$DIFF3" ]; then |
26 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0 | 37 echo $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" |
38 $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0 | |
39 if [ $? -eq 2 ]; then | |
40 echo "$DIFF3 failed! Exiting." 1>&2 | |
41 cp "$LOCAL.orig" "$LOCAL" | |
42 exit 1 | |
43 fi | |
27 cp "$LOCAL.orig" "$LOCAL" | 44 cp "$LOCAL.orig" "$LOCAL" |
28 fi | 45 fi |
29 | 46 |
30 if [ -n "$DISPLAY" ]; then | 47 if [ -n "$DISPLAY" ]; then |
31 # try using kdiff3, which is fairly nice | 48 # try using kdiff3, which is fairly nice |
46 echo "conflicts detected in $LOCAL" | 63 echo "conflicts detected in $LOCAL" |
47 merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL" | 64 merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL" |
48 exit 0 | 65 exit 0 |
49 fi | 66 fi |
50 | 67 |
51 if type diff3 > /dev/null 2>&1; then | 68 if [ -n "$DIFF3" ]; then |
52 echo "conflicts detected in $LOCAL" | 69 echo "conflicts detected in $LOCAL" |
53 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL" | 70 $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || { |
54 exit 0 | 71 case $? in |
72 1) | |
73 $EDITOR "$LOCAL" ;; | |
74 2) echo "$DIFF3 failed! Exiting." 1>&2 | |
75 cp "$LOCAL.orig" "$LOCAL" | |
76 exit 1 ;; | |
77 esac | |
78 exit 0 | |
79 } | |
55 fi | 80 fi |
56 | 81 |
57 HGTMP="" | 82 HGTMP="" |
58 cleanup_exit() { | 83 cleanup_exit() { |
59 rm -rf "$HGTMP" | 84 rm -rf "$HGTMP" |
60 } | 85 } |
61 | 86 |
62 # attempt to manually merge with diff and patch | 87 # attempt to manually merge with diff and patch |
63 if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then | 88 if [ -n "$DIFF" -a -n "$PATCH" ]; then |
64 # Remove temporary files even if we get interrupted | 89 # Remove temporary files even if we get interrupted |
65 trap "cleanup_exit" 0 # normal exit | 90 trap "cleanup_exit" 0 # normal exit |
66 trap "exit 1" 1 2 3 6 15 # HUP INT QUIT ABRT TERM | 91 trap "exit 1" 1 2 3 6 15 # HUP INT QUIT ABRT TERM |
67 | 92 |
68 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$" | 93 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$" |
69 (umask 077 && mkdir "$HGTMP") || { | 94 (umask 077 && mkdir "$HGTMP") || { |
70 echo "Could not create temporary directory! Exiting." 1>&2 | 95 echo "Could not create temporary directory! Exiting." 1>&2 |
71 exit 1 | 96 exit 1 |
72 } | 97 } |
73 | 98 |
74 diff -u "$BASE" "$OTHER" > "$HGTMP/diff" | 99 $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || : |
75 if patch "$LOCAL" < "$HGTMP/diff"; then | 100 if $PATCH "$LOCAL" < "$HGTMP/diff"; then |
76 exit 0 | 101 exit 0 |
77 else | 102 else |
78 # If rejects are empty after using the editor, merge was ok | 103 # If rejects are empty after using the editor, merge was ok |
79 $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0 | 104 $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0 |
80 fi | 105 fi |