##// END OF EJS Templates
hgmerge: various cleanups...
Radoslaw Szkodzinski -
r1701:4ba8fe49 default
parent child Browse files
Show More
@@ -37,12 +37,21 b' type $FILEMERGE >/dev/null 2>&1 || FILEM'
37 type $KDIFF3 >/dev/null 2>&1 || KDIFF3=
37 type $KDIFF3 >/dev/null 2>&1 || KDIFF3=
38 type $TKDIFF >/dev/null 2>&1 || TKDIFF=
38 type $TKDIFF >/dev/null 2>&1 || TKDIFF=
39
39
40 # random part of names
41 RAND="$RANDOM.$RANDOM.$RANDOM.$$"
42
40 # temporary directory for diff+patch merge
43 # temporary directory for diff+patch merge
41 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
44 HGTMP="${TMPDIR-/tmp}/hgmerge.$RAND"
45
46 # backup file
47 BACKUP="$LOCAL.orig.$RAND"
48
49 # file used to test for file change
50 CHGTEST="$LOCAL.chg.$RAND"
42
51
43 # put all your required cleanup here
52 # put all your required cleanup here
44 cleanup() {
53 cleanup() {
45 rm -f "$LOCAL.orig"
54 rm -f "$BACKUP" "$CHGTEST"
46 rm -rf "$HGTMP"
55 rm -rf "$HGTMP"
47 }
56 }
48
57
@@ -54,7 +63,7 b' success() {'
54
63
55 failure() {
64 failure() {
56 echo "merge failed" 1>&2
65 echo "merge failed" 1>&2
57 cp "$LOCAL.orig" "$LOCAL"
66 mv "$BACKUP" "$LOCAL"
58 cleanup
67 cleanup
59 exit 1
68 exit 1
60 }
69 }
@@ -62,55 +71,43 b' failure() {'
62 # Clean up when interrupted
71 # Clean up when interrupted
63 trap "failure" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
72 trap "failure" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
64
73
65 # Back up our file
74 # Back up our file (and try hard to keep the mtime unchanged)
66 cp "$LOCAL" "$LOCAL.orig"
75 mv "$LOCAL" "$BACKUP"
76 cp "$BACKUP" "$LOCAL"
67
77
68 # Attempt to do a non-interactive merge
78 # Attempt to do a non-interactive merge
69 if [ -n "$MERGE" ]; then
79 if [ -n "$MERGE" ]; then
70 $MERGE "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && success
80 $MERGE "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && success
71 cp "$LOCAL.orig" "$LOCAL"
81 cp "$BACKUP" "$LOCAL"
72 elif [ -n "$DIFF3" ]; then
82 elif [ -n "$DIFF3" ]; then
73 echo $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER"
83 echo $DIFF3 -m "$BACKUP" "$BASE" "$OTHER"
74 $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && success
84 $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" && success
75 if [ $? -eq 2 ]; then
85 if [ $? -eq 2 ]; then
76 echo "$DIFF3 failed! Exiting." 1>&2
86 echo "$DIFF3 failed! Exiting." 1>&2
77 cp "$LOCAL.orig" "$LOCAL"
87 cp "$BACKUP" "$LOCAL"
78 failure
88 failure
79 fi
89 fi
80 cp "$LOCAL.orig" "$LOCAL"
90 cp "$BACKUP" "$LOCAL"
81 fi
91 fi
82
92
83 # on MacOS X try FileMerge.app, shipped with Apple's developer tools
93 # on MacOS X try FileMerge.app, shipped with Apple's developer tools
84 # TODO: make proper temp files. foo.orig and foo.link are dangerous
85
86 if [ -n "$FILEMERGE" ]; then
94 if [ -n "$FILEMERGE" ]; then
87 cp "$LOCAL.orig" "$LOCAL"
95 cp "$BACKUP" "$LOCAL"
88 ln "$LOCAL" "$LOCAL.link"
96 cp "$BACKUP" "$CHGTEST"
89 # filemerge prefers the right by default
97 # filemerge prefers the right by default
90 if ! "$FILEMERGE" -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
98 $FILEMERGE -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
99 [ $? -ne 0 ] && echo "FileMerge failed to launch" && failure
100 if test "$LOCAL" -nt "$CHGTEST"
91 then
101 then
92 echo "FileMerge failed to launch"
93 failure
94 fi
95 if ! test "$LOCAL" -ef "$LOCAL.link"
96 then
97 rm "$LOCAL.orig" "$LOCAL.link"
98 success
102 success
99 else
103 else
100 rm "$LOCAL.link"
104 echo "$LOCAL seems unchanged. Was the merge successful?"
101 echo "$LOCAL is unchanged. Was the merge successful?"
102 select answer in yes no
105 select answer in yes no
103 do
106 do
104 if test "$answer" == "yes"
107 test "$answer" == "yes" && success || failure
105 then
106 rm "$LOCAL.orig"
107 success
108 else
109 failure
110 fi
111 done
108 done
112 failure
113 fi
109 fi
110 failure
114 fi
111 fi
115
112
116 if [ -n "$DISPLAY" ]; then
113 if [ -n "$DISPLAY" ]; then
@@ -136,12 +133,12 b' fi'
136
133
137 if [ -n "$DIFF3" ]; then
134 if [ -n "$DIFF3" ]; then
138 echo "conflicts detected in $LOCAL"
135 echo "conflicts detected in $LOCAL"
139 $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || {
136 $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" || {
140 case $? in
137 case $? in
141 1)
138 1)
142 $EDITOR "$LOCAL" ;;
139 $EDITOR "$LOCAL" ;;
143 2) echo "$DIFF3 failed! Exiting." 1>&2
140 2) echo "$DIFF3 failed! Exiting." 1>&2
144 cp "$LOCAL.orig" "$LOCAL"
141 cp "$BACKUP" "$LOCAL"
145 failure ;;
142 failure ;;
146 esac
143 esac
147 success
144 success
General Comments 0
You need to be logged in to leave comments. Login now