From 063f2bdbf767dd24bc0a35b5476d8025ee8646c7 Mon Sep 17 00:00:00 2001 From: Denton Liu Date: Wed, 24 Oct 2018 12:25:31 -0400 Subject: [PATCH 1/3] mergetool: accept -g/--[no-]gui as arguments In line with how difftool accepts a -g/--[no-]gui option, make mergetool accept the same option in order to use the `merge.guitool` variable to find the default mergetool instead of `merge.tool`. Signed-off-by: Denton Liu Signed-off-by: Anmol Mago Signed-off-by: Brian Ho Signed-off-by: David Lu Signed-off-by: Ryan Wang Acked-by: David Aguilar Signed-off-by: Junio C Hamano --- Documentation/git-mergetool.txt | 11 +++++++++++ git-mergetool--lib.sh | 16 +++++++++++----- git-mergetool.sh | 11 +++++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt index 3622d66488..0c7975a050 100644 --- a/Documentation/git-mergetool.txt +++ b/Documentation/git-mergetool.txt @@ -79,6 +79,17 @@ success of the resolution after the custom tool has exited. Prompt before each invocation of the merge resolution program to give the user a chance to skip the path. +-g:: +--gui:: + When 'git-mergetool' is invoked with the `-g` or `--gui` option + the default merge tool will be read from the configured + `merge.guitool` variable instead of `merge.tool`. + +--no-gui:: + This overrides a previous `-g` or `--gui` setting and reads the + default merge tool will be read from the configured `merge.tool` + variable. + -O:: Process files in the order specified in the , which has one shell glob pattern per line. diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 9a8b97a2ab..83bf52494c 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -350,17 +350,23 @@ guess_merge_tool () { } get_configured_merge_tool () { - # Diff mode first tries diff.tool and falls back to merge.tool. - # Merge mode only checks 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 if diff_mode then - merge_tool=$(git config diff.tool || git config merge.tool) + merge_tool=$(git config diff.${gui_prefix}tool || git config merge.${gui_prefix}tool) else - merge_tool=$(git config merge.tool) + merge_tool=$(git config merge.${gui_prefix}tool) fi if test -n "$merge_tool" && ! valid_tool "$merge_tool" then - echo >&2 "git config option $TOOL_MODE.tool set to unknown tool: $merge_tool" + echo >&2 "git config option $TOOL_MODE.${gui_prefix}tool set to unknown tool: $merge_tool" echo >&2 "Resetting to default..." return 1 fi diff --git a/git-mergetool.sh b/git-mergetool.sh index d07c7f387c..01b9ad59b2 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -9,7 +9,7 @@ # at the discretion of Junio C Hamano. # -USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [-O] [file to merge] ...' +USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [-g|--gui|--no-gui] [-O] [file to merge] ...' SUBDIRECTORY_OK=Yes NONGIT_OK=Yes OPTIONS_SPEC= @@ -389,6 +389,7 @@ print_noop_and_exit () { main () { prompt=$(git config --bool mergetool.prompt) + gui_tool=false guessed_merge_tool=false orderfile= @@ -414,6 +415,12 @@ main () { shift ;; esac ;; + --no-gui) + gui_tool=false + ;; + -g|--gui) + gui_tool=true + ;; -y|--no-prompt) prompt=false ;; @@ -443,7 +450,7 @@ main () { if test -z "$merge_tool" then # Check if a merge tool has been configured - merge_tool=$(get_configured_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 From 57ba181270e07ba66c55c9af466e95ab9f739680 Mon Sep 17 00:00:00 2001 From: Denton Liu Date: Wed, 24 Oct 2018 12:25:37 -0400 Subject: [PATCH 2/3] completion: support `git mergetool --[no-]gui` Signed-off-by: Denton Liu Signed-off-by: Anmol Mago Signed-off-by: Brian Ho Signed-off-by: David Lu Signed-off-by: Ryan Wang Signed-off-by: Junio C Hamano --- contrib/completion/git-completion.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index db7fd87b6b..a45b4a0508 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1833,7 +1833,7 @@ _git_mergetool () return ;; --*) - __gitcomp "--tool= --prompt --no-prompt" + __gitcomp "--tool= --prompt --no-prompt --gui --no-gui" return ;; esac From c217b9384e8ecbde866bfb09e88f1d7f87bc7b29 Mon Sep 17 00:00:00 2001 From: Denton Liu Date: Wed, 24 Oct 2018 12:25:43 -0400 Subject: [PATCH 3/3] doc: document diff/merge.guitool config keys Signed-off-by: Denton Liu Signed-off-by: Junio C Hamano --- Documentation/diff-config.txt | 8 ++++++++ Documentation/merge-config.txt | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt index 85bca83c30..e64d983c34 100644 --- a/Documentation/diff-config.txt +++ b/Documentation/diff-config.txt @@ -177,6 +177,14 @@ diff.tool:: Any other value is treated as a custom diff tool and requires that a corresponding difftool..cmd variable is defined. +diff.guitool:: + Controls which diff tool is used by linkgit:git-difftool[1] when + the -g/--gui flag is specified. This variable overrides the value + configured in `merge.guitool`. The list below shows the valid + built-in values. Any other value is treated as a custom diff tool + and requires that a corresponding difftool..cmd variable + is defined. + include::mergetools-diff.txt[] diff.indentHeuristic:: diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt index 662c2713ca..a7f4ea90c1 100644 --- a/Documentation/merge-config.txt +++ b/Documentation/merge-config.txt @@ -63,6 +63,12 @@ merge.tool:: Any other value is treated as a custom merge tool and requires that a corresponding mergetool..cmd variable is defined. +merge.guitool:: + Controls which merge tool is used by linkgit:git-mergetool[1] when the + -g/--gui flag is specified. The list below shows the valid built-in values. + Any other value is treated as a custom merge tool and requires that a + corresponding mergetool..cmd variable is defined. + include::mergetools-merge.txt[] merge.verbosity::