Re: [PATCH] t9902: Instruct git-completion.bash about a test mode
- From
Jean-Noël AVILA <jn.avila@free.fr>
- Date
- Jan 24, 2013, 22:04 UTC
- Message-ID
- <201301242304.16078.jn.avila@free.fr>
- In-Reply-To
- <7vtxq68day.fsf@alter.siamese.dyndns.org>
Le jeudi 24 janvier 2013 22:46:13, Junio C Hamano a écrit :
Show 15 quoted lines
> "Jean-Noël AVILA" <jn.avila@free.fr> writes: > > > In test mode, git completion should propose commands only if they > > belong to the list of authorized commands. > > > > Signed-off-by: Jean-Noel Avila <jn.avila@free.fr> > > --- > > > > Better show some code than try to explain. Here is what I mean by > > "filter the output git help -a". > > Why do you have to make an extra shell function call for each and > every possible Git subcommand to slow down everybody's work when not > in testing mode? >
My rational was to be sure to put the environment variable out of the way once the script has been sourced. I can make two alternative definitions of __git_list_all_commands () depending on the presence of $AUTHORIZED_CMD_LIST if you are worried about performance.
Show 63 quoted lines
> Comparing it with Peff's suggestion, it is fairly clear which one we
> should pick, I think.
>
>
>
> > contrib/completion/git-completion.bash | 16 +++++++++++++++-
> > t/t9902-completion.sh | 4 ++--
> > 2 files changed, 17 insertions(+), 3 deletions(-)
> >
> > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> > index 14dd5e7..6490553 100644
> > --- a/contrib/completion/git-completion.bash
> > +++ b/contrib/completion/git-completion.bash
> > @@ -531,6 +531,20 @@ __git_complete_strategy ()
> > return 1
> > }
> >
> > +if test -z "$AUTHORIZED_CMD_LIST"; then
> > + __git_cmdlist ()
> > + {
> > + echo $1;
> > + }
> > +else
> > + __git_cmdlist ()
> > + {
> > + if [[ " $AUTHORIZED_CMD_LIST " =~ " $1 " ]] ; then
> > + echo $1
> > + fi
> > + }
> > +fi
> > +
> > __git_list_all_commands ()
> > {
> > local i IFS=" "$'\n'
> > @@ -538,7 +552,7 @@ __git_list_all_commands ()
> > do
> > case $i in
> > *--*) : helper pattern;;
> > - *) echo $i;;
> > + *) __git_cmdlist $i;;
> > esac
> > done
> > }
> > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> > index 3cd53f8..5e7d81e 100755
> > --- a/t/t9902-completion.sh
> > +++ b/t/t9902-completion.sh
> > @@ -12,8 +12,8 @@ complete ()
> > # do nothing
> > return 0
> > }
> > -
> > -. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
> > +AUTHORIZED_CMD_LIST=" checkout show add filter-branch ls-files send-email describe"
> > +. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
> >
> > # We don't need this function to actually join words or do anything special.
> > # Also, it's cleaner to avoid touching bash's internal completion variables.
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>