Sebastian Schuberth <[email protected]> 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 <[email protected]>
> Signed-off-by: Sebastian Schuberth <[email protected]>
> ---
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html