summaryrefslogtreecommitdiff
path: root/git-mergetool--lib.sh
diff options
context:
space:
mode:
authorDavid Aguilar <davvid@gmail.com>2013-01-26 16:46:12 -0800
committerJunio C Hamano <gitster@pobox.com>2013-01-28 19:00:38 -0800
commit073678b8e6324a155fa99f40eee0637941a70a34 (patch)
treef9bdd837ffdfb50efabf58a73769477202e70b50 /git-mergetool--lib.sh
parent62957bea0c7637ae1db4452fc165c59d9408585b (diff)
downloadgit-073678b8e6324a155fa99f40eee0637941a70a34.tar.gz
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>
Diffstat (limited to 'git-mergetool--lib.sh')
-rw-r--r--git-mergetool--lib.sh61
1 files changed, 31 insertions, 30 deletions
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index f1bb372b6b..211ffe5d32 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -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"
+
+ # 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
+ }
- # Load the default definitions
- . "$mergetools/defaults"
- if ! test -f "$mergetools/$tool"
+ 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