Sebastian Schuberth <sschube...@gmail.com> writes:

> This way we do not have to risk the list of tools go out of sync
> between the implementation and the documentation. Adjust the documentation
> accordingly to not explicitly list the tools but refer to --tool-help.
>
> Signed-off-by: Junio C Hamano <gits...@pobox.com>
> Signed-off-by: Sebastian Schuberth <sschube...@gmail.com>
> ---
>  Documentation/git-difftool.txt  |  7 ++++---
>  Documentation/git-mergetool.txt |  8 ++++----
>  git-mergetool--lib.sh           | 11 ++++++++++-
>  git-mergetool.sh                | 42 
> ++++++++++++++++++++++++++++++++++++++++-
>  4 files changed, 59 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
> index 31fc2e3..0bdfe35 100644
> --- a/Documentation/git-difftool.txt
> +++ b/Documentation/git-difftool.txt
> @@ -36,9 +36,10 @@ OPTIONS
>  
>  -t <tool>::
>  --tool=<tool>::
> -     Use the diff tool specified by <tool>.  Valid values include
> -     emerge, kompare, meld, and vimdiff. Run `git difftool --tool-help`
> -     for the list of valid <tool> settings.
> +     Use the diff tool specified by <tool>.

I do not see how it is an improvement to drop the most common ones.
People sometimes read documentation without having an access to
shell to run "cmd --tool-help", and a list of handful of well known
ones would serve as a good hint to let the reader know the kind of
commands the front-end is capable of spawning, which in turn help
such a reader to imagine how the command is used to judge if it is
something the reader wants to use.

> +
> +--tool-help::
> +     List all supported values for <tool>.
>  +
>  If a diff tool is not specified, 'git difftool'
>  will use the configuration variable `diff.tool`.  If the
> diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
> index 2a49de7..99e53b1 100644
> --- a/Documentation/git-mergetool.txt
> +++ b/Documentation/git-mergetool.txt
> @@ -26,10 +26,10 @@ 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.
> +     Use the merge tool specified by <tool>.

Likewise.  Dropping araxis, bc3, etc. to trim the list to 4-5 items
that people would know what they are would make sense, though.  The
purpose of the list is not to tell if the reader's favorite tool is
supported or not---it is to hint the flavor of what kind of things
the command spawned would be capable of.

> +
> +--tool-help::
> +     List all supported values for <tool>.
>  +
>  If a merge resolution program is not specified, 'git mergetool'
>  will use the configuration variable `merge.tool`.  If the
> diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
> index ed630b2..f0865d4 100644
> --- a/git-mergetool--lib.sh
> +++ b/git-mergetool--lib.sh
> @@ -111,15 +111,18 @@ run_merge_tool () {
>       return $status
>  }
>  
> -guess_merge_tool () {
> +list_merge_tool_candidates () {
> +     # Add tools that can either do merging or diffing, but not both.
>       if merge_mode
>       then
>               tools="tortoisemerge"
>       else
>               tools="kompare"
>       fi
> +
>       if test -n "$DISPLAY"
>       then
> +             # Prefer GTK-based tools under Gnome.
>               if test -n "$GNOME_DESKTOP_SESSION_ID"
>               then
>                       tools="meld opendiff kdiff3 tkdiff xxdiff $tools"
> @@ -128,6 +131,8 @@ guess_merge_tool () {
>               fi
>               tools="$tools gvimdiff diffuse ecmerge p4merge araxis bc3"
>       fi
> +
> +     # Prefer vimdiff if vim is the default editor.
>       case "${VISUAL:-$EDITOR}" in
>       *vim*)
>               tools="$tools vimdiff emerge"
> @@ -136,6 +141,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.
> diff --git a/git-mergetool.sh b/git-mergetool.sh
> index a9f23f7..0db0c44 100755
> --- a/git-mergetool.sh
> +++ b/git-mergetool.sh
> @@ -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
>               *,*=*)
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to