mergetools: simplify how we handle "vim" and "defaults"
authorDavid Aguilar <davvid@gmail.com>
Sun, 27 Jan 2013 00:46:12 +0000 (16:46 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 29 Jan 2013 03:00:38 +0000 (19:00 -0800)
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>
git-mergetool--lib.sh
mergetools/defaults [deleted file]
mergetools/gvimdiff [new file with mode: 0644]
mergetools/gvimdiff2 [new file with mode: 0644]
mergetools/vimdiff [moved from mergetools/vim with 100% similarity]
mergetools/vimdiff2 [new file with mode: 0644]

index f1bb372..211ffe5 100644 (file)
@@ -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
diff --git a/mergetools/defaults b/mergetools/defaults
deleted file mode 100644 (file)
index 21e63ec..0000000
+++ /dev/null
@@ -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"
-}
diff --git a/mergetools/gvimdiff b/mergetools/gvimdiff
new file mode 100644 (file)
index 0000000..04a5bb0
--- /dev/null
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/gvimdiff2 b/mergetools/gvimdiff2
new file mode 100644 (file)
index 0000000..04a5bb0
--- /dev/null
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
similarity index 100%
rename from mergetools/vim
rename to mergetools/vimdiff
diff --git a/mergetools/vimdiff2 b/mergetools/vimdiff2
new file mode 100644 (file)
index 0000000..04a5bb0
--- /dev/null
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"