In git-mergetool, the logic for getting which merge tool to use is
duplicated in git-mergetool--lib, except for the fact that it needs to
know whether the tool was guessed or not.

Rewrite `get_merge_tool` to return whether or not the tool was guessed
and make git-mergetool call this function instead of duplicating the
logic. Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not
the guitool will be selected.

Signed-off-by: Denton Liu <liu.den...@gmail.com>
---
 Documentation/git-mergetool--lib.txt |  5 ++++-
 git-difftool--helper.sh              |  2 +-
 git-mergetool--lib.sh                |  6 ++++--
 git-mergetool.sh                     | 11 +++--------
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/Documentation/git-mergetool--lib.txt 
b/Documentation/git-mergetool--lib.txt
index 055550b2bc..c4f10209e0 100644
--- a/Documentation/git-mergetool--lib.txt
+++ b/Documentation/git-mergetool--lib.txt
@@ -28,7 +28,10 @@ to define the operation mode for the functions listed below.
 FUNCTIONS
 ---------
 get_merge_tool::
-       returns a merge tool.
+       returns '$is_guessed:$merge_tool'. '$is_guessed' is 'true' if
+       the tool was guessed, else 'false'. '$merge_tool' is the merge
+       tool to use. '$GIT_MERGETOOL_GUI' may be set to 'true' to search
+       for the appropriate guitool.
 
 get_merge_tool_cmd::
        returns the custom command for a merge tool.
diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh
index 7bfb6737df..78a0446668 100755
--- a/git-difftool--helper.sh
+++ b/git-difftool--helper.sh
@@ -71,7 +71,7 @@ then
        then
                merge_tool="$GIT_DIFF_TOOL"
        else
-               merge_tool="$(get_merge_tool)" || exit
+               merge_tool="$(get_merge_tool | sed -e 's/^[a-z]*://')" || exit
        fi
 fi
 
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 83bf52494c..d5e2c6c5c6 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -403,14 +403,16 @@ get_merge_tool_path () {
 }
 
 get_merge_tool () {
+       is_guessed=false
        # Check if a merge tool has been configured
-       merge_tool=$(get_configured_merge_tool)
+       merge_tool=$(get_configured_merge_tool $GIT_MERGETOOL_GUI)
        # Try to guess an appropriate merge tool if no tool has been set.
        if test -z "$merge_tool"
        then
                merge_tool=$(guess_merge_tool) || exit
+               is_guessed=true
        fi
-       echo "$merge_tool"
+       echo "$is_guessed:$merge_tool"
 }
 
 mergetool_find_win32_cmd () {
diff --git a/git-mergetool.sh b/git-mergetool.sh
index 01b9ad59b2..6ad8024e46 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -449,14 +449,9 @@ main () {
 
        if test -z "$merge_tool"
        then
-               # Check if a merge tool has been configured
-               merge_tool=$(get_configured_merge_tool $gui_tool)
-               # Try to guess an appropriate merge tool if no tool has been 
set.
-               if test -z "$merge_tool"
-               then
-                       merge_tool=$(guess_merge_tool) || exit
-                       guessed_merge_tool=true
-               fi
+               IFS=':' read guessed_merge_tool merge_tool <<-EOF
+               $(GIT_MERGETOOL_GUI=$gui_tool get_merge_tool)
+               EOF
        fi
        merge_keep_backup="$(git config --bool mergetool.keepBackup || echo 
true)"
        merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries 
|| echo false)"
-- 
2.21.0.967.gf85e14fd49

Reply via email to