git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3] completion: add new _GIT_complete helper

From
SZEDER Gábor <szeder@ira.uka.de>
Date
May 6, 2012, 11:14 UTC
Message-ID
<20120506111425.GJ2164@goldbirke>
In-Reply-To
<1336231400-6878-1-git-send-email-felipe.contreras@gmail.com>
Hi,
On Sat, May 05, 2012 at 05:23:20PM +0200, Felipe Contreras wrote:
> This simplifies the completions, and makes it easier to define aliases:
> 
>  _GIT_complete gf git_fetch

So, 'gf' is an alias for 'git fetch', for which the user would like to use the completion for 'git fetch', right? But that completion function is caled _git_fetch(), so the underscore prefix is missing here.

Besides, this example won't work, because the completion for 'git fetch' uses __git_complete_remote_or_refspec(), which in turn relies on finding out the name of the git command from the word on the command line, and it won't be able to do that from 'gf'.

I remember we discussed this in an earlier round, and you even suggested a possible fix (passing the command name as argument to __git_complete_remote_or_refspec()). I think that's the right thing to do here.

> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
> 
> Since v3:
_This_ is v3 ;)
Show 15 quoted lines
>  * Rename to _GIT_complete to follow bash completion "guidelines"
>  * Get rid of foo_wrap name
> 
> Since v2:
> 
>  * Remove stuff related to aliases fixes; should work on top of master
> 
>  contrib/completion/git-completion.bash |   67 ++++++++++++++------------------
>  t/t9902-completion.sh                  |    2 +-
>  2 files changed, 31 insertions(+), 38 deletions(-)
> 
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 9f56ec7..f300b87 100755
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> +__git_func_wrap ()
Good.
Show 16 quoted lines
> +{
> +	if [[ -n ${ZSH_VERSION-} ]]; then
> +		emulate -L bash
> +		setopt KSH_TYPESET
> +
> +		# workaround zsh's bug that leaves 'words' as a special
> +		# variable in versions < 4.3.12
> +		typeset -h words
> +
> +		# workaround zsh's bug that quotes spaces in the COMPREPLY
> +		# array if IFS doesn't contain spaces.
> +		typeset -h IFS
> +	fi
> +	local cur words cword prev
> +	_get_comp_words_by_ref -n =: cur words cword prev
> +	__git_func "$@"

What is this "$@" for and why? None of the _git_<cmd>() functions take any arguments, nor does _git() and _gitk(), and AFAICT Bash won't pass any either.

Show 6 quoted lines
> +}
> +
> +_GIT_complete ()
> +{
> +	local name="${2-$1}"
> +	eval "$(typeset -f __git_func_wrap | sed -e "s/__git_func/_$name/")"
Still don't like the subshell and sed here ...
Show 6 quoted lines
> +	complete -o bashdefault -o default -o nospace -F _${name}_wrap $1 2>/dev/null \
> +		|| complete -o default -o nospace -F _${name}_wrap $1
> +}
> +
> +_GIT_complete git
> +_GIT_complete gitk

... because it adds delay when the completion script is loaded. But I still don't have ideas how to avoid them.

Previous: Jonathan NiederNext: SZEDER Gábor
Message 16 of 24 in “completion: add new _GIT_complete helper”
  1. completion: add new _GIT_complete helperFelipe Contreras, May 5, 2012
  2. Jonathan NiederMay 5, 2012
  3. Felipe ContrerasMay 5, 2012
  4. Jonathan NiederMay 5, 2012
  5. Jonathan NiederMay 5, 2012
  6. Felipe ContrerasMay 5, 2012
  7. Jonathan gives feedback --> flamewars inevitable? (Re: [PATCH v3] completion: add new _GIT_complete helper)Jonathan Nieder, May 5, 2012
  8. Felipe ContrerasMay 5, 2012
  9. Jonathan NiederMay 5, 2012
  10. Jonathan NiederMay 5, 2012
  11. Tay Ray ChuanMay 6, 2012
  12. Felipe ContrerasMay 14, 2012
  13. Jonathan NiederMay 5, 2012
  14. SZEDER GáborMay 6, 2012
  15. Jonathan NiederMay 6, 2012
  16. SZEDER GáborMay 6, 2012
  17. SZEDER GáborMay 6, 2012
  18. SZEDER GáborMay 6, 2012
  19. SZEDER GáborMay 6, 2012
  20. Felipe ContrerasMay 6, 2012
  21. Felipe ContrerasMay 6, 2012
  22. SZEDER GáborMay 6, 2012
  23. Felipe ContrerasMay 7, 2012
  24. SZEDER GáborMay 7, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.