mergetool--lib: Refactor tools into separate files

Individual merge tools are now defined in a mergetools/$tool file which is sourced at runtime. The individual files are installed into $(git --exec-path)/mergetools/. New tools can be added by creating a new file instead of editing the git-mergetool--lib.sh scriptlet. http://thread.gmane.org/gmane.comp.version-control.git/134906/focus=135006 Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

David Aguilar committed Aug 18, 2011 at 00:23 UTC bc7a96a8965d4ce0651689301e1702a942dfb9f0
17 files changed +369 -333
Makefile
+11
@@ -302,6 +302,7 @@ bindir = $(prefix)/$(bindir_relative)
302 mandir = share/man
303 infodir = share/info
304 gitexecdir = libexec/git-core
305 +mergetoolsdir = $(gitexecdir)/mergetools
306 sharedir = $(prefix)/share
307 gitwebdir = $(sharedir)/gitweb
308 template_dir = share/git-core/templates
@@ -2257,6 +2258,13 @@ endif
2258 gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
2259 export gitexec_instdir
2260
2261 +ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
2262 +mergetools_instdir = $(mergetoolsdir)
2263 +else
2264 +mergetools_instdir = $(prefix)/$(mergetoolsdir)
2265 +endif
2266 +mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
2267 +
2268 install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
2269
2270 install: all
@@ -2266,6 +2274,9 @@ install: all
2274 $(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2275 $(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2276 $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2277 + $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2278 + (cd mergetools && $(TAR) cf - .) | \
2279 + (cd '$(DESTDIR_SQ)$(mergetools_instdir_SQ)' && umask 022 && $(TAR) xof -)
2280 ifndef NO_PERL
2281 $(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
2282 $(MAKE) -C gitweb install
git-mergetool--lib.sh
+52 -333
@@ -9,26 +9,7 @@ merge_mode() {
9 }
10
11 translate_merge_tool_path () {
12 - case "$1" in
13 - araxis)
14 - echo compare
15 - ;;
16 - bc3)
17 - echo bcompare
18 - ;;
19 - emerge)
20 - echo emacs
21 - ;;
22 - gvimdiff|gvimdiff2)
23 - echo gvim
24 - ;;
25 - vimdiff|vimdiff2)
26 - echo vim
27 - ;;
28 - *)
29 - echo "$1"
30 - ;;
31 - esac
12 + echo "$1"
13 }
14
15 check_unchanged () {
@@ -49,40 +30,55 @@ check_unchanged () {
30 fi
31 }
32
33 +valid_tool_config () {
34 + if test -n "$(get_merge_tool_cmd "$1")"
35 + then
36 + return 0
37 + else
38 + return 1
39 + fi
40 +}
41 +
42 valid_tool () {
43 + setup_tool "$1" || valid_tool_config "$1"
44 +}
45 +
46 +setup_tool () {
47 case "$1" in
54 - araxis | bc3 | diffuse | ecmerge | emerge | gvimdiff | gvimdiff2 | \
55 - kdiff3 | meld | opendiff | p4merge | tkdiff | vimdiff | vimdiff2 | xxdiff)
56 - ;; # happy
57 - kompare)
58 - if ! diff_mode
59 - then
60 - return 1
61 - fi
62 - ;;
63 - tortoisemerge)
64 - if ! merge_mode
65 - then
66 - return 1
67 - fi
48 + vim*|gvim*)
49 + tool=vim
50 ;;
51 *)
70 - if test -z "$(get_merge_tool_cmd "$1")"
71 - then
72 - return 1
73 - fi
52 + tool="$1"
53 ;;
54 esac
55 + mergetools="$(git --exec-path)/mergetools"
56 +
57 + # Load the default definitions
58 + . "$mergetools/defaults"
59 + if ! test -f "$mergetools/$tool"
60 + then
61 + return 1
62 + fi
63 +
64 + # Load the redefined functions
65 + . "$mergetools/$tool"
66 +
67 + if merge_mode && ! can_merge
68 + then
69 + echo "error: '$tool' can not be used to resolve merges" >&2
70 + exit 1
71 + elif diff_mode && ! can_diff
72 + then
73 + echo "error: '$tool' can only be used to resolve merges" >&2
74 + exit 1
75 + fi
76 + return 0
77 }
78
79 get_merge_tool_cmd () {
80 # Prints the custom command for a merge tool
80 - if test -n "$1"
81 - then
82 - merge_tool="$1"
83 - else
84 - merge_tool="$(get_merge_tool)"
85 - fi
81 + merge_tool="$1"
82 if diff_mode
83 then
84 echo "$(git config difftool.$merge_tool.cmd ||
@@ -92,6 +88,7 @@ get_merge_tool_cmd () {
88 fi
89 }
90
91 +# Entry point for running tools
92 run_merge_tool () {
93 # If GIT_PREFIX is empty then we cannot use it in tools
94 # that expect to be able to chdir() to its value.
@@ -102,288 +99,15 @@ run_merge_tool () {
99 base_present="$2"
100 status=0
101
105 - case "$1" in
106 - araxis)
107 - if merge_mode
108 - then
109 - touch "$BACKUP"
110 - if $base_present
111 - then
112 - "$merge_tool_path" -wait -merge -3 -a1 \
113 - "$BASE" "$LOCAL" "$REMOTE" "$MERGED" \
114 - >/dev/null 2>&1
115 - else
116 - "$merge_tool_path" -wait -2 \
117 - "$LOCAL" "$REMOTE" "$MERGED" \
118 - >/dev/null 2>&1
119 - fi
120 - check_unchanged
121 - else
122 - "$merge_tool_path" -wait -2 "$LOCAL" "$REMOTE" \
123 - >/dev/null 2>&1
124 - fi
125 - ;;
126 - bc3)
127 - if merge_mode
128 - then
129 - touch "$BACKUP"
130 - if $base_present
131 - then
132 - "$merge_tool_path" "$LOCAL" "$REMOTE" "$BASE" \
133 - -mergeoutput="$MERGED"
134 - else
135 - "$merge_tool_path" "$LOCAL" "$REMOTE" \
136 - -mergeoutput="$MERGED"
137 - fi
138 - check_unchanged
139 - else
140 - "$merge_tool_path" "$LOCAL" "$REMOTE"
141 - fi
142 - ;;
143 - diffuse)
144 - if merge_mode
145 - then
146 - touch "$BACKUP"
147 - if $base_present
148 - then
149 - "$merge_tool_path" \
150 - "$LOCAL" "$MERGED" "$REMOTE" \
151 - "$BASE" | cat
152 - else
153 - "$merge_tool_path" \
154 - "$LOCAL" "$MERGED" "$REMOTE" | cat
155 - fi
156 - check_unchanged
157 - else
158 - "$merge_tool_path" "$LOCAL" "$REMOTE" | cat
159 - fi
160 - ;;
161 - ecmerge)
162 - if merge_mode
163 - then
164 - touch "$BACKUP"
165 - if $base_present
166 - then
167 - "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" \
168 - --default --mode=merge3 --to="$MERGED"
169 - else
170 - "$merge_tool_path" "$LOCAL" "$REMOTE" \
171 - --default --mode=merge2 --to="$MERGED"
172 - fi
173 - check_unchanged
174 - else
175 - "$merge_tool_path" --default --mode=diff2 \
176 - "$LOCAL" "$REMOTE"
177 - fi
178 - ;;
179 - emerge)
180 - if merge_mode
181 - then
182 - if $base_present
183 - then
184 - "$merge_tool_path" \
185 - -f emerge-files-with-ancestor-command \
186 - "$LOCAL" "$REMOTE" "$BASE" \
187 - "$(basename "$MERGED")"
188 - else
189 - "$merge_tool_path" \
190 - -f emerge-files-command \
191 - "$LOCAL" "$REMOTE" \
192 - "$(basename "$MERGED")"
193 - fi
194 - status=$?
195 - else
196 - "$merge_tool_path" -f emerge-files-command \
197 - "$LOCAL" "$REMOTE"
198 - fi
199 - ;;
200 - gvimdiff|vimdiff)
201 - if merge_mode
202 - then
203 - touch "$BACKUP"
204 - if $base_present
205 - then
206 - "$merge_tool_path" -f -d -c "wincmd J" \
207 - "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
208 - else
209 - "$merge_tool_path" -f -d -c "wincmd l" \
210 - "$LOCAL" "$MERGED" "$REMOTE"
211 - fi
212 - check_unchanged
213 - else
214 - "$merge_tool_path" -R -f -d -c "wincmd l" \
215 - -c 'cd $GIT_PREFIX' \
216 - "$LOCAL" "$REMOTE"
217 - fi
218 - ;;
219 - gvimdiff2|vimdiff2)
220 - if merge_mode
221 - then
222 - touch "$BACKUP"
223 - "$merge_tool_path" -f -d -c "wincmd l" \
224 - "$LOCAL" "$MERGED" "$REMOTE"
225 - check_unchanged
226 - else
227 - "$merge_tool_path" -R -f -d -c "wincmd l" \
228 - -c 'cd $GIT_PREFIX' \
229 - "$LOCAL" "$REMOTE"
230 - fi
231 - ;;
232 - kdiff3)
233 - if merge_mode
234 - then
235 - if $base_present
236 - then
237 - "$merge_tool_path" --auto \
238 - --L1 "$MERGED (Base)" \
239 - --L2 "$MERGED (Local)" \
240 - --L3 "$MERGED (Remote)" \
241 - -o "$MERGED" \
242 - "$BASE" "$LOCAL" "$REMOTE" \
243 - >/dev/null 2>&1
244 - else
245 - "$merge_tool_path" --auto \
246 - --L1 "$MERGED (Local)" \
247 - --L2 "$MERGED (Remote)" \
248 - -o "$MERGED" \
249 - "$LOCAL" "$REMOTE" \
250 - >/dev/null 2>&1
251 - fi
252 - status=$?
253 - else
254 - "$merge_tool_path" --auto \
255 - --L1 "$MERGED (A)" \
256 - --L2 "$MERGED (B)" "$LOCAL" "$REMOTE" \
257 - >/dev/null 2>&1
258 - fi
259 - ;;
260 - kompare)
261 - "$merge_tool_path" "$LOCAL" "$REMOTE"
262 - ;;
263 - meld)
264 - if merge_mode
265 - then
266 - touch "$BACKUP"
267 - "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE"
268 - check_unchanged
269 - else
270 - "$merge_tool_path" "$LOCAL" "$REMOTE"
271 - fi
272 - ;;
273 - opendiff)
274 - if merge_mode
275 - then
276 - touch "$BACKUP"
277 - if $base_present
278 - then
279 - "$merge_tool_path" "$LOCAL" "$REMOTE" \
280 - -ancestor "$BASE" \
281 - -merge "$MERGED" | cat
282 - else
283 - "$merge_tool_path" "$LOCAL" "$REMOTE" \
284 - -merge "$MERGED" | cat
285 - fi
286 - check_unchanged
287 - else
288 - "$merge_tool_path" "$LOCAL" "$REMOTE" | cat
289 - fi
290 - ;;
291 - p4merge)
292 - if merge_mode
293 - then
294 - touch "$BACKUP"
295 - $base_present || >"$BASE"
296 - "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
297 - check_unchanged
298 - else
299 - "$merge_tool_path" "$LOCAL" "$REMOTE"
300 - fi
301 - ;;
302 - tkdiff)
303 - if merge_mode
304 - then
305 - if $base_present
306 - then
307 - "$merge_tool_path" -a "$BASE" \
308 - -o "$MERGED" "$LOCAL" "$REMOTE"
309 - else
310 - "$merge_tool_path" \
311 - -o "$MERGED" "$LOCAL" "$REMOTE"
312 - fi
313 - status=$?
314 - else
315 - "$merge_tool_path" "$LOCAL" "$REMOTE"
316 - fi
317 - ;;
318 - tortoisemerge)
319 - if $base_present
320 - then
321 - touch "$BACKUP"
322 - "$merge_tool_path" \
323 - -base:"$BASE" -mine:"$LOCAL" \
324 - -theirs:"$REMOTE" -merged:"$MERGED"
325 - check_unchanged
326 - else
327 - echo "TortoiseMerge cannot be used without a base" 1>&2
328 - status=1
329 - fi
330 - ;;
331 - xxdiff)
332 - if merge_mode
333 - then
334 - touch "$BACKUP"
335 - if $base_present
336 - then
337 - "$merge_tool_path" -X --show-merged-pane \
338 - -R 'Accel.SaveAsMerged: "Ctrl-S"' \
339 - -R 'Accel.Search: "Ctrl+F"' \
340 - -R 'Accel.SearchForward: "Ctrl-G"' \
341 - --merged-file "$MERGED" \
342 - "$LOCAL" "$BASE" "$REMOTE"
343 - else
344 - "$merge_tool_path" -X $extra \
345 - -R 'Accel.SaveAsMerged: "Ctrl-S"' \
346 - -R 'Accel.Search: "Ctrl+F"' \
347 - -R 'Accel.SearchForward: "Ctrl-G"' \
348 - --merged-file "$MERGED" \
349 - "$LOCAL" "$REMOTE"
350 - fi
351 - check_unchanged
352 - else
353 - "$merge_tool_path" \
354 - -R 'Accel.Search: "Ctrl+F"' \
355 - -R 'Accel.SearchForward: "Ctrl-G"' \
356 - "$LOCAL" "$REMOTE"
357 - fi
358 - ;;
359 - *)
360 - merge_tool_cmd="$(get_merge_tool_cmd "$1")"
361 - if test -z "$merge_tool_cmd"
362 - then
363 - if merge_mode
364 - then
365 - status=1
366 - fi
367 - break
368 - fi
369 - if merge_mode
370 - then
371 - trust_exit_code="$(git config --bool \
372 - mergetool."$1".trustExitCode || echo false)"
373 - if test "$trust_exit_code" = "false"
374 - then
375 - touch "$BACKUP"
376 - ( eval $merge_tool_cmd )
377 - check_unchanged
378 - else
379 - ( eval $merge_tool_cmd )
380 - status=$?
381 - fi
382 - else
383 - ( eval $merge_tool_cmd )
384 - fi
385 - ;;
386 - esac
102 + # Bring tool-specific functions into scope
103 + setup_tool "$1"
104 +
105 + if merge_mode
106 + then
107 + merge_cmd "$1"
108 + else
109 + diff_cmd "$1"
110 + fi
111 return $status
112 }
113
@@ -449,12 +173,7 @@ get_configured_merge_tool () {
173
174 get_merge_tool_path () {
175 # A merge tool has been set, so verify that it's valid.
452 - if test -n "$1"
453 - then
454 - merge_tool="$1"
455 - else
456 - merge_tool="$(get_merge_tool)"
457 - fi
176 + merge_tool="$1"
177 if ! valid_tool "$merge_tool"
178 then
179 echo >&2 "Unknown merge tool $merge_tool"
@@ -483,7 +202,7 @@ get_merge_tool_path () {
202
203 get_merge_tool () {
204 # Check if a merge tool has been configured
486 - merge_tool=$(get_configured_merge_tool)
205 + merge_tool="$(get_configured_merge_tool)"
206 # Try to guess an appropriate merge tool if no tool has been set.
207 if test -z "$merge_tool"
208 then
mergetools/araxis new
+20
@@ -0,0 +1,20 @@
1 +diff_cmd () {
2 + "$merge_tool_path" -wait -2 "$LOCAL" "$REMOTE" >/dev/null 2>&1
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + if $base_present
8 + then
9 + "$merge_tool_path" -wait -merge -3 -a1 \
10 + "$BASE" "$LOCAL" "$REMOTE" "$MERGED" >/dev/null 2>&1
11 + else
12 + "$merge_tool_path" -wait -2 \
13 + "$LOCAL" "$REMOTE" "$MERGED" >/dev/null 2>&1
14 + fi
15 + check_unchanged
16 +}
17 +
18 +translate_merge_tool_path() {
19 + echo compare
20 +}
mergetools/bc3 new
+20
@@ -0,0 +1,20 @@
1 +diff_cmd () {
2 + "$merge_tool_path" "$LOCAL" "$REMOTE"
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + if $base_present
8 + then
9 + "$merge_tool_path" "$LOCAL" "$REMOTE" "$BASE" \
10 + -mergeoutput="$MERGED"
11 + else
12 + "$merge_tool_path" "$LOCAL" "$REMOTE" \
13 + -mergeoutput="$MERGED"
14 + fi
15 + check_unchanged
16 +}
17 +
18 +translate_merge_tool_path() {
19 + echo bcompare
20 +}
mergetools/defaults new
+46
@@ -0,0 +1,46 @@
1 +# Redefined by builtin tools
2 +can_merge () {
3 + return 0
4 +}
5 +
6 +can_diff () {
7 + return 0
8 +}
9 +
10 +diff_cmd () {
11 + merge_tool_cmd="$(get_merge_tool_cmd "$1")"
12 + if test -z "$merge_tool_cmd"
13 + then
14 + status=1
15 + break
16 + fi
17 + ( eval $merge_tool_cmd )
18 + status=$?
19 + return $status
20 +}
21 +
22 +merge_cmd () {
23 + merge_tool_cmd="$(get_merge_tool_cmd "$1")"
24 + if test -z "$merge_tool_cmd"
25 + then
26 + status=1
27 + break
28 + fi
29 + trust_exit_code="$(git config --bool \
30 + mergetool."$1".trustExitCode || echo false)"
31 + if test "$trust_exit_code" = "false"
32 + then
33 + touch "$BACKUP"
34 + ( eval $merge_tool_cmd )
35 + status=$?
36 + check_unchanged
37 + else
38 + ( eval $merge_tool_cmd )
39 + status=$?
40 + fi
41 + return $status
42 +}
43 +
44 +translate_merge_tool_path () {
45 + echo "$1"
46 +}
mergetools/diffuse new
+17
@@ -0,0 +1,17 @@
1 +diff_cmd () {
2 + "$merge_tool_path" "$LOCAL" "$REMOTE" | cat
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + if $base_present
8 + then
9 + "$merge_tool_path" \
10 + "$LOCAL" "$MERGED" "$REMOTE" \
11 + "$BASE" | cat
12 + else
13 + "$merge_tool_path" \
14 + "$LOCAL" "$MERGED" "$REMOTE" | cat
15 + fi
16 + check_unchanged
17 +}
mergetools/ecmerge new
+16
@@ -0,0 +1,16 @@
1 +diff_cmd () {
2 + "$merge_tool_path" --default --mode=diff2 "$LOCAL" "$REMOTE"
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + if $base_present
8 + then
9 + "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" \
10 + --default --mode=merge3 --to="$MERGED"
11 + else
12 + "$merge_tool_path" "$LOCAL" "$REMOTE" \
13 + --default --mode=merge2 --to="$MERGED"
14 + fi
15 + check_unchanged
16 +}
mergetools/emerge new
+23
@@ -0,0 +1,23 @@
1 +diff_cmd () {
2 + "$merge_tool_path" -f emerge-files-command "$LOCAL" "$REMOTE"
3 +}
4 +
5 +merge_cmd () {
6 + if $base_present
7 + then
8 + "$merge_tool_path" \
9 + -f emerge-files-with-ancestor-command \
10 + "$LOCAL" "$REMOTE" "$BASE" \
11 + "$(basename "$MERGED")"
12 + else
13 + "$merge_tool_path" \
14 + -f emerge-files-command \
15 + "$LOCAL" "$REMOTE" \
16 + "$(basename "$MERGED")"
17 + fi
18 + status=$?
19 +}
20 +
21 +translate_merge_tool_path() {
22 + echo emacs
23 +}
mergetools/kdiff3 new
+24
@@ -0,0 +1,24 @@
1 +diff_cmd () {
2 + "$merge_tool_path" --auto \
3 + --L1 "$MERGED (A)" --L2 "$MERGED (B)" \
4 + "$LOCAL" "$REMOTE" >/dev/null 2>&1
5 +}
6 +
7 +merge_cmd () {
8 + if $base_present
9 + then
10 + "$merge_tool_path" --auto \
11 + --L1 "$MERGED (Base)" \
12 + --L2 "$MERGED (Local)" \
13 + --L3 "$MERGED (Remote)" \
14 + -o "$MERGED" "$BASE" "$LOCAL" "$REMOTE" \
15 + >/dev/null 2>&1
16 + else
17 + "$merge_tool_path" --auto \
18 + --L1 "$MERGED (Local)" \
19 + --L2 "$MERGED (Remote)" \
20 + -o "$MERGED" "$LOCAL" "$REMOTE" \
21 + >/dev/null 2>&1
22 + fi
23 + status=$?
24 +}
mergetools/kompare new
+7
@@ -0,0 +1,7 @@
1 +can_merge () {
2 + return 1
3 +}
4 +
5 +diff_cmd () {
6 + "$merge_tool_path" "$LOCAL" "$REMOTE"
7 +}
mergetools/meld new
+9
@@ -0,0 +1,9 @@
1 +diff_cmd () {
2 + "$merge_tool_path" "$LOCAL" "$REMOTE"
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE"
8 + check_unchanged
9 +}
mergetools/opendiff new
+16
@@ -0,0 +1,16 @@
1 +diff_cmd () {
2 + "$merge_tool_path" "$LOCAL" "$REMOTE" | cat
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + if $base_present
8 + then
9 + "$merge_tool_path" "$LOCAL" "$REMOTE" \
10 + -ancestor "$BASE" -merge "$MERGED" | cat
11 + else
12 + "$merge_tool_path" "$LOCAL" "$REMOTE" \
13 + -merge "$MERGED" | cat
14 + fi
15 + check_unchanged
16 +}
mergetools/p4merge new
+10
@@ -0,0 +1,10 @@
1 +diff_cmd () {
2 + "$merge_tool_path" "$LOCAL" "$REMOTE"
3 +}
4 +
5 +merge_cmd () {
6 + touch "$BACKUP"
7 + $base_present || >"$BASE"
8 + "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
9 + check_unchanged
10 +}
mergetools/tkdiff new
+12
@@ -0,0 +1,12 @@
1 +diff_cmd () {
2 + "$merge_tool_path" "$LOCAL" "$REMOTE"
3 +}
4 +
5 +merge_cmd () {
6 + if $base_present
7 + then
8 + "$merge_tool_path" -a "$BASE" -o "$MERGED" "$LOCAL" "$REMOTE"
9 + else
10 + "$merge_tool_path" -o "$MERGED" "$LOCAL" "$REMOTE"
11 + fi
12 +}
mergetools/tortoisemerge new
+17
@@ -0,0 +1,17 @@
1 +can_diff () {
2 + return 1
3 +}
4 +
5 +merge_cmd () {
6 + if $base_present
7 + then
8 + touch "$BACKUP"
9 + "$merge_tool_path" \
10 + -base:"$BASE" -mine:"$LOCAL" \
11 + -theirs:"$REMOTE" -merged:"$MERGED"
12 + check_unchanged
13 + else
14 + echo "TortoiseMerge cannot be used without a base" 1>&2
15 + return 1
16 + fi
17 +}
mergetools/vim new
+44
@@ -0,0 +1,44 @@
1 +diff_cmd () {
2 + case "$1" in
3 + gvimdiff|vimdiff)
4 + "$merge_tool_path" -R -f -d \
5 + -c 'wincmd l' -c 'cd $GIT_PREFIX' "$LOCAL" "$REMOTE"
6 + ;;
7 + gvimdiff2|vimdiff2)
8 + "$merge_tool_path" -R -f -d \
9 + -c 'wincmd l' -c 'cd $GIT_PREFIX' "$LOCAL" "$REMOTE"
10 + ;;
11 + esac
12 +}
13 +
14 +merge_cmd () {
15 + touch "$BACKUP"
16 + case "$1" in
17 + gvimdiff|vimdiff)
18 + if $base_present
19 + then
20 + "$merge_tool_path" -f -d -c 'wincmd J' \
21 + "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
22 + else
23 + "$merge_tool_path" -f -d -c 'wincmd l' \
24 + "$LOCAL" "$MERGED" "$REMOTE"
25 + fi
26 + ;;
27 + gvimdiff2|vimdiff2)
28 + "$merge_tool_path" -f -d -c 'wincmd l' \
29 + "$LOCAL" "$MERGED" "$REMOTE"
30 + ;;
31 + esac
32 + check_unchanged
33 +}
34 +
35 +translate_merge_tool_path() {
36 + case "$1" in
37 + gvimdiff|gvimdiff2)
38 + echo gvim
39 + ;;
40 + vimdiff|vimdiff2)
41 + echo vim
42 + ;;
43 + esac
44 +}
mergetools/xxdiff new
+25
@@ -0,0 +1,25 @@
1 +diff_cmd () {
2 + "$merge_tool_path" \
3 + -R 'Accel.Search: "Ctrl+F"' \
4 + -R 'Accel.SearchForward: "Ctrl-G"' \
5 + "$LOCAL" "$REMOTE"
6 +}
7 +
8 +merge_cmd () {
9 + touch "$BACKUP"
10 + if $base_present
11 + then
12 + "$merge_tool_path" -X --show-merged-pane \
13 + -R 'Accel.SaveAsMerged: "Ctrl-S"' \
14 + -R 'Accel.Search: "Ctrl+F"' \
15 + -R 'Accel.SearchForward: "Ctrl-G"' \
16 + --merged-file "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
17 + else
18 + "$merge_tool_path" -X $extra \
19 + -R 'Accel.SaveAsMerged: "Ctrl-S"' \
20 + -R 'Accel.Search: "Ctrl+F"' \
21 + -R 'Accel.SearchForward: "Ctrl-G"' \
22 + --merged-file "$MERGED" "$LOCAL" "$REMOTE"
23 + fi
24 + check_unchanged
25 +}