Re: mergetool: include custom tools in '--tool-help'
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 27, 2013, 18:03 UTC
- Message-ID
- <7vobgawljs.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <20130127163442.GQ7498@serenity.lan>
John Keeping <john@keeping.me.uk> writes:
> 'git mergetool --tool-help' only lists builtin tools, not those that the > user has configured via a 'mergetool.<tool>.cmd' config value. Fix this > by inspecting the tools configured in this way and adding them to the > available and unavailable lists before displaying them.
Although I am not a mergetool user, I would imagine that it would make sense to show it as available.
Just like "git help -a" lists subcommands in a way that can be easy to tell which ones are the standard ones and which ones are user customizations, this may want to give a similar distinction, though. I dunno.
Show 59 quoted lines
>
> Signed-off-by: John Keeping <john@keeping.me.uk>
> ---
> After the recent changes to mergetool, do we want to do something like
> this as well, so that 'git mergetool --tool-help' will display any tools
> configured by the user/system administrator?
>
> This is on top of jk/mergetool.
>
> git-mergetool--lib.sh | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
> index 1d0fb12..f9a617c 100644
> --- a/git-mergetool--lib.sh
> +++ b/git-mergetool--lib.sh
> @@ -206,6 +206,29 @@ list_merge_tool_candidates () {
> esac
> }
>
> +# Adds tools from git-config to the available and unavailable lists.
> +# The tools are found in "$1.<tool>.cmd".
> +add_config_tools() {
> + section=$1
> +
> + eval $(git config --get-regexp $section'\..*\.cmd' |
> + while read -r key value
> + do
> + tool=${key#mergetool.}
> + tool=${tool%.cmd}
> +
> + tool=$(echo "$tool" |sed -e 's/'\''/'\''\\'\'\''/g')
> +
> + cmd=$(eval -- "set -- $value"; echo "$1")
> + if type "$cmd" >/dev/null 2>&1
> + then
> + echo "available=\"\${available}\"'$tool'\"\$LF\""
> + else
> + echo "unavailable=\"\${unavailable}\"'$tool'\"\$LF\""
> + fi
> + done)
> +}
> +
> show_tool_help () {
> unavailable= available= LF='
> '
> @@ -223,6 +246,12 @@ show_tool_help () {
> fi
> done
>
> + add_config_tools mergetool
> + if diff_mode
> + then
> + add_config_tools difftool
> + fi
> +
> cmd_name=${TOOL_MODE}tool
> if test -n "$available"
> then