mergetools: simplify how we handle "vim" and "defaults"

Remove the exceptions for "vim" and "defaults" in the mergetool library
so that every filename in mergetools/ matches 1:1 with the name of a
valid built-in tool.

Define the trivial fallback definition of shell functions in-line in
git-mergetool-lib script, instead of dot-sourcing them from another
file.  The result is much easier to follow.

[jc: squashed in an update from John Keeping as well]

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Aguilar 2013-01-26 16:46:12 -08:00 коммит произвёл Junio C Hamano
Родитель 62957bea0c
Коммит 073678b8e6
6 изменённых файлов: 34 добавлений и 52 удалений

Просмотреть файл

@ -1,5 +1,7 @@
#!/bin/sh
# git-mergetool--lib is a library for common merge tool functions
MERGE_TOOLS_DIR=$(git --exec-path)/mergetools
diff_mode() {
test "$TOOL_MODE" = diff
}
@ -44,19 +46,32 @@ valid_tool () {
}
setup_tool () {
case "$1" in
vim*|gvim*)
tool=vim
;;
*)
tool="$1"
;;
esac
mergetools="$(git --exec-path)/mergetools"
tool="$1"
# Load the default definitions
. "$mergetools/defaults"
if ! test -f "$mergetools/$tool"
# Fallback definitions, to be overriden by tools.
can_merge () {
return 0
}
can_diff () {
return 0
}
diff_cmd () {
status=1
return $status
}
merge_cmd () {
status=1
return $status
}
translate_merge_tool_path () {
echo "$1"
}
if ! test -f "$MERGE_TOOLS_DIR/$tool"
then
# Use a special return code for this case since we want to
# source "defaults" even when an explicit tool path is
@ -66,7 +81,7 @@ setup_tool () {
fi
# Load the redefined functions
. "$mergetools/$tool"
. "$MERGE_TOOLS_DIR/$tool"
if merge_mode && ! can_merge
then
@ -194,24 +209,10 @@ list_merge_tool_candidates () {
show_tool_help () {
unavailable= available= LF='
'
scriptlets="$(git --exec-path)"/mergetools
for i in "$scriptlets"/*
for i in "$MERGE_TOOLS_DIR"/*
do
. "$scriptlets"/defaults
. "$i"
tool="$(basename "$i")"
if test "$tool" = "defaults"
then
continue
elif merge_mode && ! can_merge
then
continue
elif diff_mode && ! can_diff
then
continue
fi
tool=$(basename "$i")
setup_tool "$tool" 2>/dev/null || continue
merge_tool_path=$(translate_merge_tool_path "$tool")
if type "$merge_tool_path" >/dev/null 2>&1

Просмотреть файл

@ -1,22 +0,0 @@
# Redefined by builtin tools
can_merge () {
return 0
}
can_diff () {
return 0
}
diff_cmd () {
status=1
return $status
}
merge_cmd () {
status=1
return $status
}
translate_merge_tool_path () {
echo "$1"
}

1
mergetools/gvimdiff Normal file
Просмотреть файл

@ -0,0 +1 @@
. "$MERGE_TOOLS_DIR/vimdiff"

1
mergetools/gvimdiff2 Normal file
Просмотреть файл

@ -0,0 +1 @@
. "$MERGE_TOOLS_DIR/vimdiff"

Просмотреть файл

1
mergetools/vimdiff2 Normal file
Просмотреть файл

@ -0,0 +1 @@
. "$MERGE_TOOLS_DIR/vimdiff"