Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'dl/mergetool-gui-option'
"git mergetool" learned to take the "--[no-]gui" option, just like
"git difftool" does.

* dl/mergetool-gui-option:
  doc: document diff/merge.guitool config keys
  completion: support `git mergetool --[no-]gui`
  mergetool: accept -g/--[no-]gui as arguments
  • Loading branch information
gitster committed Oct 30, 2018
2 parents 97ffca6 + c217b93 commit 87c15d1
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 8 deletions.
8 changes: 8 additions & 0 deletions Documentation/diff-config.txt
Expand Up @@ -177,6 +177,14 @@ diff.tool::
Any other value is treated as a custom diff tool and requires
that a corresponding difftool.<tool>.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.<guitool>.cmd variable
is defined.

include::mergetools-diff.txt[]

diff.indentHeuristic::
Expand Down
11 changes: 11 additions & 0 deletions Documentation/git-mergetool.txt
Expand Up @@ -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<orderfile>::
Process files in the order specified in the
<orderfile>, which has one shell glob pattern per line.
Expand Down
6 changes: 6 additions & 0 deletions Documentation/merge-config.txt
Expand Up @@ -63,6 +63,12 @@ merge.tool::
Any other value is treated as a custom merge tool and requires
that a corresponding mergetool.<tool>.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.<guitool>.cmd variable is defined.

include::mergetools-merge.txt[]

merge.verbosity::
Expand Down
2 changes: 1 addition & 1 deletion contrib/completion/git-completion.bash
Expand Up @@ -1822,7 +1822,7 @@ _git_mergetool ()
return
;;
--*)
__gitcomp "--tool= --prompt --no-prompt"
__gitcomp "--tool= --prompt --no-prompt --gui --no-gui"
return
;;
esac
Expand Down
16 changes: 11 additions & 5 deletions git-mergetool--lib.sh
Expand Up @@ -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
Expand Down
11 changes: 9 additions & 2 deletions git-mergetool.sh
Expand Up @@ -9,7 +9,7 @@
# at the discretion of Junio C Hamano.
#

USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [-O<orderfile>] [file to merge] ...'
USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [-g|--gui|--no-gui] [-O<orderfile>] [file to merge] ...'
SUBDIRECTORY_OK=Yes
NONGIT_OK=Yes
OPTIONS_SPEC=
Expand Down Expand Up @@ -389,6 +389,7 @@ print_noop_and_exit () {

main () {
prompt=$(git config --bool mergetool.prompt)
gui_tool=false
guessed_merge_tool=false
orderfile=

Expand All @@ -414,6 +415,12 @@ main () {
shift ;;
esac
;;
--no-gui)
gui_tool=false
;;
-g|--gui)
gui_tool=true
;;
-y|--no-prompt)
prompt=false
;;
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 87c15d1

Please sign in to comment.