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

Re: [PATCH v2] tests: add initial bash completion tests

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Apr 13, 2012, 11:14 UTC
Message-ID
<20120413111437.GF2164@goldbirke>
In-Reply-To
<CAMP44s3g8acV4fjaSvnUo_jnhj40-TWR0az6zOwRNfv9_Qa23g@mail.gmail.com>
On Fri, Apr 13, 2012 at 01:48:51PM +0300, Felipe Contreras wrote:
Show 49 quoted lines
> 2012/4/13 SZEDER Gábor <szeder@ira.uka.de>:
> > On Fri, Apr 13, 2012 at 11:12:36AM +0200, SZEDER Gábor wrote:
> >> 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.
> 
> Well, yeah, that's one reason, but also I don't see the point in
> trying to fill the internal bash completion variables, maybe there
> would be some conflicts? Plus, the bash version of
> _get_comp_words_by_ref is rather complicated, so I decided to start
> with something simple that I could understand and see exactly what's
> going on. And for zsh I would definitely prefer to override
> _get_comp_words_by_ref than to mess with the internal variables,
> although I haven't found a way to test completion for zsh.

The tests are run in a non-interactive shell, which by default doesn't load bash completion with its complicated _get_comp_words_by_ref(). So these tests use _get_comp_words_by_ref() from git's completion script.

Anyway, out of curiosity I quickly tried this on top of b8574ba7 (i.e. your patch from today's pu):

diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 3bbec79b..6c1ea956 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -27,27 +27,6 @@ complete ()
 
 . "$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
-}
-
 print_comp ()
 {
 	local IFS=$'\n'
@@ -56,10 +35,10 @@ print_comp ()
 
 run_completion ()
 {
-	local -a COMPREPLY _words
-	local _cword
-	_words=( $1 )
-	(( _cword = ${#_words[@]} - 1 ))
+	local -a COMPREPLY COMP_WORDS
+	local COMP_CWORD
+	COMP_WORDS=( $1 )
+	(( COMP_CWORD = ${#COMP_WORDS[@]} - 1 ))
 	_git && print_comp
 }

i.e. to set COMP_WORDS and COMP_CWORD in run_completion() and it
worked.  However, I agree that it feels iffy to mess with a
shell-specific variable, and I'm afraid that this just happened to
work on my system, but it might be broken in previous or future bash
versions.


Best,
Gábor
Previous: Felipe ContrerasNext: Felipe Contreras
Message 11 of 21 in “tests: add initial bash completion tests”
  1. tests: add initial bash completion testsFelipe Contreras, Apr 11, 2012
  2. Junio C HamanoApr 11, 2012
  3. Felipe ContrerasApr 12, 2012
  4. Junio C HamanoApr 12, 2012
  5. Felipe ContrerasApr 12, 2012
  6. Junio C HamanoApr 12, 2012
  7. Junio C HamanoApr 13, 2012
  8. SZEDER GáborApr 13, 2012
  9. SZEDER GáborApr 13, 2012
  10. Felipe ContrerasApr 13, 2012
  11. SZEDER GáborApr 13, 2012
  12. Felipe ContrerasApr 13, 2012
  13. Felipe ContrerasApr 13, 2012
  14. SZEDER GáborApr 13, 2012
  15. Thomas RastApr 13, 2012
  16. Junio C HamanoApr 13, 2012
  17. Felipe ContrerasApr 14, 2012
  18. SZEDER GáborApr 17, 2012
  19. Felipe ContrerasApr 17, 2012
  20. SZEDER GáborApr 17, 2012
  21. tests: add tests for the __gitcomp() completion helper functionSZEDER Gábor, Apr 17, 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.