mergetool: use get_merge_tool function
authorDenton Liu <liu.denton@gmail.com>
Mon, 29 Apr 2019 06:21:08 +0000 (02:21 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 May 2019 14:11:59 +0000 (23:11 +0900)
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
through the return code and make git-mergetool call this function
instead of duplicating the logic. Note that 1 was chosen to be the
return code of when a tool is guessed because it seems like a slightly
more abnormal condition than getting a tool that's explicitly specified
but this is completely arbitrary.

Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not the
guitool will be selected.

This change is not completely backwards compatible as there may be
external users of git-mergetool--lib. However, only one user,
git-diffall[1], was found from searching GitHub and Google, and this
tool is superseded by `git difftool --dir-diff` anyway. It seems very
unlikely that there exists an external caller that would take into
account the return code of `get_merge_tool` as it would always return 0
before this change so this change probably does not affect any external
users.

[1]: https://github.com/thenigan/git-diffall

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-mergetool--lib.txt
git-difftool--helper.sh
git-mergetool--lib.sh
git-mergetool.sh
index 055550b2bcc805780396b83b162a328230c0a1c6..4da9d240962f24da7daa7ebde7b4f0db4634cdd8 100644 (file)
@@ -28,7 +28,9 @@ to define the operation mode for the functions listed below.
 FUNCTIONS
 ---------
 get_merge_tool::
-       returns a merge tool.
+       returns a merge tool. the return code is 1 if we returned a guessed
+       merge tool, else 0. '$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.
index 7bfb6737dfe7be46f3f29903bef844c3c2b1be11..46af3e60b7185b2767accbee3420903edaf53d6f 100755 (executable)
@@ -71,7 +71,7 @@ then
        then
                merge_tool="$GIT_DIFF_TOOL"
        else
-               merge_tool="$(get_merge_tool)" || exit
+               merge_tool="$(get_merge_tool)"
        fi
 fi
 
index 83bf52494cd26437eaa3c755c3359951937f1ab2..b928179a2e9034a897ff8ce9755c6eefa53a1744 100644 (file)
@@ -403,14 +403,17 @@ 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"
+       test "$is_guessed" = false
 }
 
 mergetool_find_win32_cmd () {
index 01b9ad59b24ff77221d5db4118c9d0265dc25fad..88fa6a914a172877991ae9890cae1a42ca51fb89 100755 (executable)
@@ -389,7 +389,7 @@ print_noop_and_exit () {
 
 main () {
        prompt=$(git config --bool mergetool.prompt)
-       gui_tool=false
+       GIT_MERGETOOL_GUI=false
        guessed_merge_tool=false
        orderfile=
 
@@ -416,10 +416,10 @@ main () {
                        esac
                        ;;
                --no-gui)
-                       gui_tool=false
+                       GIT_MERGETOOL_GUI=false
                        ;;
                -g|--gui)
-                       gui_tool=true
+                       GIT_MERGETOOL_GUI=true
                        ;;
                -y|--no-prompt)
                        prompt=false
@@ -449,12 +449,8 @@ 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"
+               if ! merge_tool=$(get_merge_tool)
                then
-                       merge_tool=$(guess_merge_tool) || exit
                        guessed_merge_tool=true
                fi
        fi