mergetool: fallback to tool when guitool unavailable
authorDenton Liu <liu.denton@gmail.com>
Mon, 29 Apr 2019 06:21:14 +0000 (02:21 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 May 2019 14:11:59 +0000 (23:11 +0900)
commit60aced3dfa68df60952fed28c4ae63a5bbda0275
treec8b2ed84040a9627929143e478c4b9ef361d0801
parent884630b2e2634969656faabc7f4e33cab2e32b35
mergetool: fallback to tool when guitool unavailable

In git-difftool, if the tool is called with --gui but `diff.guitool` is
not set, it falls back to `diff.tool`. Make git-mergetool also fallback
from `merge.guitool` to `merge.tool` if the former is undefined.

If git-difftool, when called with `--gui`, were to use
`get_configured_mergetool` in a future patch, it would also get the
fallback behavior in the following precedence:

1. diff.guitool
2. merge.guitool
3. diff.tool
4. merge.tool

The behavior for when difftool or mergetool are called without `--gui`
should be identical with or without this patch.

Note that the search loop could be written as

sections="merge"
keys="tool"
if diff_mode
then
sections="diff $sections"
fi
if gui_mode
then
keys="guitool $keys"
fi

merge_tool=$(
IFS=' '
for key in $keys
do
for section in $sections
do
selected=$(git config $section.$key)
if test -n "$selected"
then
echo "$selected"
return
fi
done
done)

which would make adding a mode in the future much easier. However,
adding a new mode will likely never happen as it is highly discouraged
so, as a result, it is written in its current form so that it is more
readable for future readers.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-mergetool.txt
git-mergetool--lib.sh
t/t7610-mergetool.sh