mergetool: support --tool-help option like difftool does
authorJunio C Hamano <gitster@pobox.com>
Mon, 23 Jul 2012 21:16:12 +0000 (14:16 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 Jul 2012 21:42:39 +0000 (14:42 -0700)
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>
Documentation/git-mergetool.txt
git-mergetool--lib.sh
git-mergetool.sh

index 2a49de7cfe5188b531bc02f1115e253bfa10e0e0..d7207bd9b9bba59a0e1f97341fb77927026e1b52 100644 (file)
@@ -27,9 +27,9 @@ OPTIONS
 -t <tool>::
 --tool=<tool>::
        Use the merge resolution program specified by <tool>.
-       Valid merge tools are:
-       araxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3,
-       meld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff.
+       Valid values include emerge, gvimdiff, kdiff3,
+       meld, vimdiff, and tortoisemerge. Run `git mergetool --tool-help`
+       for the list of valid <tool> settings.
 +
 If a merge resolution program is not specified, 'git mergetool'
 will use the configuration variable `merge.tool`.  If the
index ed630b208a80a36d729b5074a39bc53df0cabd59..f730253c0eac181ec8507d2c837d4ec85a0ae991 100644 (file)
@@ -111,7 +111,7 @@ run_merge_tool () {
        return $status
 }
 
-guess_merge_tool () {
+list_merge_tool_candidates () {
        if merge_mode
        then
                tools="tortoisemerge"
@@ -136,6 +136,10 @@ guess_merge_tool () {
                tools="$tools emerge vimdiff"
                ;;
        esac
+}
+
+guess_merge_tool () {
+       list_merge_tool_candidates
        echo >&2 "merge tool candidates: $tools"
 
        # Loop over each candidate and stop when a valid merge tool is found.
index a9f23f7fcdff610f2b206bc121db7c9217bbf0c7..0db0c44845f54920e26d97391f577e76305ecc56 100755 (executable)
@@ -8,7 +8,7 @@
 # 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
 OPTIONS_SPEC=
 TOOL_MODE=merge
@@ -284,11 +284,51 @@ merge_file () {
     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)
 
 while test $# != 0
 do
     case "$1" in
+       --tool-help)
+               show_tool_help
+               ;;
        -t|--tool*)
            case "$#,$1" in
                *,*=*)