[PATCH] t9902: Instruct git-completion.bash about a test mode
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.av...@free.fr --- Better show some code than try to explain. Here is what I mean by filter the output git help -a. 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. -- 1.8.1.1.271.g02f55e6 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] t9902: Instruct git-completion.bash about a test mode
Jean-Noël AVILA jn.av...@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.av...@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. 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] t9902: Instruct git-completion.bash about a test mode
Le jeudi 24 janvier 2013 22:46:13, Junio C Hamano a écrit : Jean-Noël AVILA jn.av...@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.av...@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. 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] t9902: Instruct git-completion.bash about a test mode
Jean-Noël AVILA jn.av...@free.fr writes: 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. Actually, it does not matter, as once __git_list_all_commands is run, its result is kept in a variable. So Peff's if test -z $FAKE_COMMAND_LIST; then __git_cmdlist() { git help -a | egrep '^ [a-zA-Z0-9]' } else __git_cmdlist() { printf '%s' $FAKE_COMMAND_LIST } fi would be just as simple if not simpler, does the same thing, and is sufficient, I think. The t9902 test is only interested in making sure that the completion works, and we do not want git help -a that omits a subcommand from its output that is not built in your particular environment to get in the way, which will not be an issue with this approach. -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] t9902: Instruct git-completion.bash about a test mode
Le jeudi 24 janvier 2013 23:29:33, Junio C Hamano a écrit : Jean-Noël AVILA jn.av...@free.fr writes: 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. Actually, it does not matter, as once __git_list_all_commands is run, its result is kept in a variable. So Peff's if test -z $FAKE_COMMAND_LIST; then __git_cmdlist() { git help -a | egrep '^ [a-zA-Z0-9]' } else __git_cmdlist() { printf '%s' $FAKE_COMMAND_LIST } fi would be just as simple if not simpler, does the same thing, and is sufficient, I think. The t9902 test is only interested in making sure that the completion works, and we do not want git help -a that omits a subcommand from its output that is not built in your particular environment to get in the way, which will not be an issue with this approach. Ah. I totally missed the point. I though that the requested change was to intersect the list needed for the test with the one provided by the standard completion. -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html