Re: [PATCH v2] tests: add initial bash completion tests
- From
SZEDER Gábor <szeder@ira.uka.de>
- Date
- Apr 13, 2012, 09:45 UTC
- Message-ID
- <20120413094500.GD2164@goldbirke>
- In-Reply-To
- <20120413091236.GC2164@goldbirke>
On Fri, Apr 13, 2012 at 11:12:36AM +0200, SZEDER Gábor wrote:
Show 26 quoted lines
> On Thu, Apr 12, 2012 at 12:57:03AM +0300, Felipe Contreras wrote:
> > +. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
> > +
> > +_get_comp_words_by_ref ()
> > +{
> > + while [ $# -gt 0 ]; do
> > + case "$1" in
> > + cur)
> > + cur=${_words[_cword]}
> > + ;;
> > + prev)
> > + prev=${_words[_cword-1]}
> > + ;;
> > + words)
> > + words=("${_words[@]}")
> > + ;;
> > + cword)
> > + cword=$_cword
> > + ;;
> > + esac
> > + shift
> > + done
> > +}
>
> Git's completion script already implements this function. Why
> override it here?Ah, ok, I think I got it.
Of course, the words on the command line must be specified somehow to test completion functions. But the two implementations of _get_comp_words_by_ref() for bash and zsh in the completion script take the words on the command line from different variables, so we need a common implementation to test completion functions both on bash and zsh. Hence the _get_comp_words_by_ref() above, which takes the words on the command line and their count from $_words and $_cword, respectively, and run_completion() below, which fills those variables with its arguments.
Show 14 quoted lines
> > +print_comp ()
> > +{
> > + local IFS=$'\n'
> > + echo "${COMPREPLY[*]}" > out
> > +}
> > +
> > +run_completion ()
> > +{
> > + local -a COMPREPLY _words
> > + local _cword
> > + _words=( $1 )
> > + (( _cword = ${#_words[@]} - 1 ))
> > + _git && print_comp
> > +}