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
+}