summaryrefslogtreecommitdiff
path: root/git-mergetool--lib.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-05-19 07:45:30 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-05-19 07:45:30 (GMT)
commit85ac27e04fd0cf1d086028e87f69ffb498c1451b (patch)
treee4486ede9a0d92509bb49a6435e7cb126be6bf99 /git-mergetool--lib.sh
parentfed9391fba44417d6d6559795c0f0194882f12c1 (diff)
parent6c22d715e7b4067a6865ff3fbceab991d0042c12 (diff)
downloadgit-85ac27e04fd0cf1d086028e87f69ffb498c1451b.zip
git-85ac27e04fd0cf1d086028e87f69ffb498c1451b.tar.gz
git-85ac27e04fd0cf1d086028e87f69ffb498c1451b.tar.bz2
Merge branch 'dl/difftool-mergetool'
Update "git difftool" and "git mergetool" so that the combinations of {diff,merge}.{tool,guitool} configuration variables serve as fallback settings of each other in a sensible order. * dl/difftool-mergetool: difftool: fallback on merge.guitool difftool: make --gui, --tool and --extcmd mutually exclusive mergetool: fallback to tool when guitool unavailable mergetool--lib: create gui_mode function mergetool: use get_merge_tool function t7610: add mergetool --gui tests t7610: unsuppress output
Diffstat (limited to 'git-mergetool--lib.sh')
-rw-r--r--git-mergetool--lib.sh47
1 files changed, 35 insertions, 12 deletions
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index aaa4eed..204a5ac 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -80,14 +80,18 @@ show_tool_names () {
}
}
-diff_mode() {
+diff_mode () {
test "$TOOL_MODE" = diff
}
-merge_mode() {
+merge_mode () {
test "$TOOL_MODE" = merge
}
+gui_mode () {
+ test "$GIT_MERGETOOL_GUI" = true
+}
+
translate_merge_tool_path () {
echo "$1"
}
@@ -351,20 +355,36 @@ guess_merge_tool () {
}
get_configured_merge_tool () {
- # If first argument is true, find the guitool instead
- if test "$1" = true
- then
- gui_prefix=gui
- fi
-
- # Diff mode first tries diff.(gui)tool and falls back to merge.(gui)tool.
- # Merge mode only checks merge.(gui)tool
+ keys=
if diff_mode
then
- merge_tool=$(git config diff.${gui_prefix}tool || git config merge.${gui_prefix}tool)
+ if gui_mode
+ then
+ keys="diff.guitool merge.guitool diff.tool merge.tool"
+ else
+ keys="diff.tool merge.tool"
+ fi
else
- merge_tool=$(git config merge.${gui_prefix}tool)
+ if gui_mode
+ then
+ keys="merge.guitool merge.tool"
+ else
+ keys="merge.tool"
+ fi
fi
+
+ merge_tool=$(
+ IFS=' '
+ for key in $keys
+ do
+ selected=$(git config $key)
+ if test -n "$selected"
+ then
+ echo "$selected"
+ return
+ fi
+ done)
+
if test -n "$merge_tool" && ! valid_tool "$merge_tool"
then
echo >&2 "git config option $TOOL_MODE.${gui_prefix}tool set to unknown tool: $merge_tool"
@@ -404,14 +424,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)
# 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 () {