Re: [PATCH] t9902: Instruct git-completion.bash about a test mode
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 24, 2013, 21:46 UTC
- Message-ID
- <7vtxq68day.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <201301242220.09067.jn.avila@free.fr>
"Jean-Noël AVILA" <jn.avila@free.fr> writes:
Show 8 quoted lines
> 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?
Comparing it with Peff's suggestion, it is fairly clear which one we should pick, I think.
Show 53 quoted lines
> 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.