mergetool: support --tool-help option like difftool does

This way we do not have to risk the list of tools going out of sync
between the implementation and the documentation.

In the same spirit as bf73fc2 (difftool: print list of valid tools
with '--tool-help', 2012-03-29), trim the list of merge backends in
the documentation.  We do not want to have a complete list of valid
tools; we only want a list to help people guess what kind of things
the tools do to be specified there, and refer them to --tool-help
for a complete list.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2012-07-23 14:16:12 -07:00
parent e6dfbcf12b
commit 109859e274
3 changed files with 49 additions and 5 deletions

View File

@ -27,9 +27,9 @@ OPTIONS
-t <tool>:: -t <tool>::
--tool=<tool>:: --tool=<tool>::
Use the merge resolution program specified by <tool>. Use the merge resolution program specified by <tool>.
Valid merge tools are: Valid values include emerge, gvimdiff, kdiff3,
araxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3, meld, vimdiff, and tortoisemerge. Run `git mergetool --tool-help`
meld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff. for the list of valid <tool> settings.
+ +
If a merge resolution program is not specified, 'git mergetool' If a merge resolution program is not specified, 'git mergetool'
will use the configuration variable `merge.tool`. If the will use the configuration variable `merge.tool`. If the

View File

@ -111,7 +111,7 @@ run_merge_tool () {
return $status return $status
} }
guess_merge_tool () { list_merge_tool_candidates () {
if merge_mode if merge_mode
then then
tools="tortoisemerge" tools="tortoisemerge"
@ -136,6 +136,10 @@ guess_merge_tool () {
tools="$tools emerge vimdiff" tools="$tools emerge vimdiff"
;; ;;
esac esac
}
guess_merge_tool () {
list_merge_tool_candidates
echo >&2 "merge tool candidates: $tools" echo >&2 "merge tool candidates: $tools"
# Loop over each candidate and stop when a valid merge tool is found. # Loop over each candidate and stop when a valid merge tool is found.

View File

@ -8,7 +8,7 @@
# at the discretion of Junio C Hamano. # at the discretion of Junio C Hamano.
# #
USAGE='[--tool=tool] [-y|--no-prompt|--prompt] [file to merge] ...' USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...'
SUBDIRECTORY_OK=Yes SUBDIRECTORY_OK=Yes
OPTIONS_SPEC= OPTIONS_SPEC=
TOOL_MODE=merge TOOL_MODE=merge
@ -284,11 +284,51 @@ merge_file () {
return 0 return 0
} }
show_tool_help () {
TOOL_MODE=merge
list_merge_tool_candidates
unavailable= available= LF='
'
for i in $tools
do
merge_tool_path=$(translate_merge_tool_path "$i")
if type "$merge_tool_path" >/dev/null 2>&1
then
available="$available$i$LF"
else
unavailable="$unavailable$i$LF"
fi
done
if test -n "$available"
then
echo "'git mergetool --tool=<tool>' may be set to one of the following:"
echo "$available" | sort | sed -e 's/^/ /'
else
echo "No suitable tool for 'git mergetool --tool=<tool>' found."
fi
if test -n "$unavailable"
then
echo
echo 'The following tools are valid, but not currently available:'
echo "$unavailable" | sort | sed -e 's/^/ /'
fi
if test -n "$unavailable$available"
then
echo
echo "Some of the tools listed above only work in a windowed"
echo "environment. If run in a terminal-only session, they will fail."
fi
exit 0
}
prompt=$(git config --bool mergetool.prompt || echo true) prompt=$(git config --bool mergetool.prompt || echo true)
while test $# != 0 while test $# != 0
do do
case "$1" in case "$1" in
--tool-help)
show_tool_help
;;
-t|--tool*) -t|--tool*)
case "$#,$1" in case "$#,$1" in
*,*=*) *,*=*)