"Jean-Noël AVILA" <jn.avila@xxxxxxx> 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@xxxxxxx> > --- > > 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. > 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html