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>
This commit is contained in:
Denton Liu 2019-04-29 02:21:08 -04:00 committed by Junio C Hamano
parent 57d93c1d2c
commit 05fb8726cc
4 changed files with 12 additions and 11 deletions

View File

@ -28,7 +28,9 @@ to define the operation mode for the functions listed below.
FUNCTIONS FUNCTIONS
--------- ---------
get_merge_tool:: 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:: get_merge_tool_cmd::
returns the custom command for a merge tool. returns the custom command for a merge tool.

View File

@ -71,7 +71,7 @@ then
then then
merge_tool="$GIT_DIFF_TOOL" merge_tool="$GIT_DIFF_TOOL"
else else
merge_tool="$(get_merge_tool)" || exit merge_tool="$(get_merge_tool)"
fi fi
fi fi

View File

@ -403,14 +403,17 @@ get_merge_tool_path () {
} }
get_merge_tool () { get_merge_tool () {
is_guessed=false
# Check if a merge tool has been configured # 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. # Try to guess an appropriate merge tool if no tool has been set.
if test -z "$merge_tool" if test -z "$merge_tool"
then then
merge_tool=$(guess_merge_tool) || exit merge_tool=$(guess_merge_tool) || exit
is_guessed=true
fi fi
echo "$merge_tool" echo "$merge_tool"
test "$is_guessed" = false
} }
mergetool_find_win32_cmd () { mergetool_find_win32_cmd () {

View File

@ -389,7 +389,7 @@ print_noop_and_exit () {
main () { main () {
prompt=$(git config --bool mergetool.prompt) prompt=$(git config --bool mergetool.prompt)
gui_tool=false GIT_MERGETOOL_GUI=false
guessed_merge_tool=false guessed_merge_tool=false
orderfile= orderfile=
@ -416,10 +416,10 @@ main () {
esac esac
;; ;;
--no-gui) --no-gui)
gui_tool=false GIT_MERGETOOL_GUI=false
;; ;;
-g|--gui) -g|--gui)
gui_tool=true GIT_MERGETOOL_GUI=true
;; ;;
-y|--no-prompt) -y|--no-prompt)
prompt=false prompt=false
@ -449,12 +449,8 @@ main () {
if test -z "$merge_tool" if test -z "$merge_tool"
then then
# Check if a merge tool has been configured if ! merge_tool=$(get_merge_tool)
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 then
merge_tool=$(guess_merge_tool) || exit
guessed_merge_tool=true guessed_merge_tool=true
fi fi
fi fi