mergetool: use get_merge_tool function

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>

Denton Liu committed Apr 29, 2019 at 02:21 UTC 05fb8726cccc74908853c166248ff9b6abdafae5
4 files changed +12 -11
Documentation/git-mergetool--lib.txt
+3 -1
@@ -28,7 +28,9 @@ to define the operation mode for the functions listed below.
28 FUNCTIONS
29 ---------
30 get_merge_tool::
31 - returns a merge tool.
31 + returns a merge tool. the return code is 1 if we returned a guessed
32 + merge tool, else 0. '$GIT_MERGETOOL_GUI' may be set to 'true' to
33 + search for the appropriate guitool.
34
35 get_merge_tool_cmd::
36 returns the custom command for a merge tool.
git-difftool--helper.sh
+1 -1
@@ -71,7 +71,7 @@ then
71 then
72 merge_tool="$GIT_DIFF_TOOL"
73 else
74 - merge_tool="$(get_merge_tool)" || exit
74 + merge_tool="$(get_merge_tool)"
75 fi
76 fi
77
git-mergetool--lib.sh
+4 -1
@@ -403,14 +403,17 @@ get_merge_tool_path () {
403 }
404
405 get_merge_tool () {
406 + is_guessed=false
407 # Check if a merge tool has been configured
407 - merge_tool=$(get_configured_merge_tool)
408 + merge_tool=$(get_configured_merge_tool $GIT_MERGETOOL_GUI)
409 # Try to guess an appropriate merge tool if no tool has been set.
410 if test -z "$merge_tool"
411 then
412 merge_tool=$(guess_merge_tool) || exit
413 + is_guessed=true
414 fi
415 echo "$merge_tool"
416 + test "$is_guessed" = false
417 }
418
419 mergetool_find_win32_cmd () {
git-mergetool.sh
+4 -8
@@ -389,7 +389,7 @@ print_noop_and_exit () {
389
390 main () {
391 prompt=$(git config --bool mergetool.prompt)
392 - gui_tool=false
392 + GIT_MERGETOOL_GUI=false
393 guessed_merge_tool=false
394 orderfile=
395
@@ -416,10 +416,10 @@ main () {
416 esac
417 ;;
418 --no-gui)
419 - gui_tool=false
419 + GIT_MERGETOOL_GUI=false
420 ;;
421 -g|--gui)
422 - gui_tool=true
422 + GIT_MERGETOOL_GUI=true
423 ;;
424 -y|--no-prompt)
425 prompt=false
@@ -449,12 +449,8 @@ main () {
449
450 if test -z "$merge_tool"
451 then
452 - # Check if a merge tool has been configured
453 - merge_tool=$(get_configured_merge_tool $gui_tool)
454 - # Try to guess an appropriate merge tool if no tool has been set.
455 - if test -z "$merge_tool"
452 + if ! merge_tool=$(get_merge_tool)
453 then
457 - merge_tool=$(guess_merge_tool) || exit
454 guessed_merge_tool=true
455 fi
456 fi