]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mergetool--lib: improve support for vimdiff-style tool variants
authorpudinha <rogi@skylittlesystem.org>
Wed, 29 Jul 2020 21:31:12 +0000 (22:31 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 29 Jul 2020 21:44:46 +0000 (14:44 -0700)
The merge tools vimdiff2, vimdiff3, gvimdiff2, gvimdiff3 and bc3 are all
variants of the main tools vimdiff and bc. They are implemented in the
main and a one-liner script that just sources it exist for each.

Allow variants ending in [0-9] to be correctly wired without the need
for such one-liners, so instead of 5 scripts, only 1 (gvimdiff) is
needed.

Signed-off-by: pudinha <rogi@skylittlesystem.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-mergetool--lib.sh
mergetools/bc
mergetools/bc3 [deleted file]
mergetools/gvimdiff2 [deleted file]
mergetools/gvimdiff3 [deleted file]
mergetools/vimdiff
mergetools/vimdiff2 [deleted file]
mergetools/vimdiff3 [deleted file]

index 204a5acd66f5444412f0088b8df6cb0ae2fd6b41..29fecc340fd11a2a35efe3aabdb8639881ab1c09 100644 (file)
@@ -43,7 +43,14 @@ show_tool_names () {
 
        shown_any=
        ( cd "$MERGE_TOOLS_DIR" && ls ) | {
-               while read toolname
+               while read scriptname
+               do
+                       setup_tool "$scriptname" 2>/dev/null
+                       variants="$variants$(list_tool_variants)\n"
+               done
+               variants="$(echo "$variants" | sort | uniq)"
+
+               for toolname in $variants
                do
                        if setup_tool "$toolname" 2>/dev/null &&
                                (eval "$condition" "$toolname")
@@ -157,6 +164,10 @@ setup_tool () {
                echo "$1"
        }
 
+       list_tool_variants () {
+               echo "$tool"
+       }
+
        # Most tools' exit codes cannot be trusted, so By default we ignore
        # their exit code and check the merged file's modification time in
        # check_unchanged() to determine whether or not the merge was
@@ -178,19 +189,26 @@ setup_tool () {
                false
        }
 
-
-       if ! test -f "$MERGE_TOOLS_DIR/$tool"
+       if test -f "$MERGE_TOOLS_DIR/$tool"
        then
+               . "$MERGE_TOOLS_DIR/$tool"
+       elif test -f "$MERGE_TOOLS_DIR/${tool%[0-9]}"
+       then
+               . "$MERGE_TOOLS_DIR/${tool%[0-9]}"
+       else
                setup_user_tool
                return $?
        fi
 
-       # Load the redefined functions
-       . "$MERGE_TOOLS_DIR/$tool"
        # Now let the user override the default command for the tool.  If
        # they have not done so then this will return 1 which we ignore.
        setup_user_tool
 
+       if ! list_tool_variants | grep -q "^$tool$"
+       then
+               return 1
+       fi
+
        if merge_mode && ! can_merge
        then
                echo "error: '$tool' can not be used to resolve merges" >&2
index 3a69e60faa9c95dcf388cd295d040e9b88e0defd..a89086ee720f842359eefe58f369af2774457438 100644 (file)
@@ -21,3 +21,8 @@ translate_merge_tool_path() {
                echo bcompare
        fi
 }
+
+list_tool_variants () {
+       echo bc
+       echo bc3
+}
diff --git a/mergetools/bc3 b/mergetools/bc3
deleted file mode 100644 (file)
index 5d8dd48..0000000
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/bc"
diff --git a/mergetools/gvimdiff2 b/mergetools/gvimdiff2
deleted file mode 100644 (file)
index 04a5bb0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/gvimdiff3 b/mergetools/gvimdiff3
deleted file mode 100644 (file)
index 04a5bb0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
index 10d86f3e19304125cecf06ddad928b9ffe2d0c08..3925e1fc3e2dad92d3567e81a245b2785eb6f960 100644 (file)
@@ -46,3 +46,11 @@ translate_merge_tool_path() {
 exit_code_trustable () {
        true
 }
+
+list_tool_variants () {
+       for prefix in '' g; do
+               for suffix in '' 2 3; do
+                       echo "${prefix}vimdiff${suffix}"
+               done
+       done
+}
diff --git a/mergetools/vimdiff2 b/mergetools/vimdiff2
deleted file mode 100644 (file)
index 04a5bb0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff3 b/mergetools/vimdiff3
deleted file mode 100644 (file)
index 04a5bb0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"