Re: [PATCH v3 1/4] completion: be nicer with zsh
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Feb 2, 2012, 08:48 UTC
- Message-ID
- <20120202084859.GC3823@burratino>
- In-Reply-To
- <1328145320-14071-1-git-send-email-felipe.contreras@gmail.com>
Hi,
Felipe Contreras wrote:
> Felipe Contreras (4): > completion: be nicer with zsh
Since I can't find this patch in the mail archive, I'll reply here. Luckily the most important bit is above already.
I think I mentioned before that this subject line is what will appear in the shortlog and the shortlog is all that some people will see of the changelog, so it should include a self-contained description of the impact of the patch.
However, clearly I did not say it clearly enough. :) I guess it's better to take a cue from storytellers and show rather than tell. (Please don't take this as a precedent --- I will not always be doing the style fixes myself, and sometimes will consider a patch to scratch someone else's itch not worth the trouble and work on something else.)
-- >8 -- From: Felipe Contreras <felipe.contreras@gmail.com> Date: Thu, 2 Feb 2012 03:15:17 +0200 Subject: completion: avoid default value assignment on : true command
zsh versions from 4.3.0 to present (4.3.15) do not correctly propagate the SH_WORD_SPLIT option into the subshell in ${foo:=$(bar)} expressions. For example, after running
emulate sh
fn () {
var='one two'
printf '%s\n' $var
}
x=$(fn)
: ${y=$(fn)}printing "$x" results in two lines as expected, but printing "$y" results in a single line because $var is expanded as a single word when evaluating fn to compute y.
So avoid the construct, and use an explicit 'test -n "$foo" || foo=$(bar)' instead. This fixes a bug tht caused all commands to be treated as porcelain and show up in "git <TAB><TAB>" completion, because the list of all commands was treated as a single word in __git_list_porcelain_commands and did not match any of the patterns that would usually cause plumbing to be excluded.
[jn: clarified commit message, indentation style fix]
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- contrib/completion/git-completion.bash | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 78be1958..d7965daf 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -676,7 +676,8 @@ __git_merge_strategies= # is needed. __git_compute_merge_strategies () { - : ${__git_merge_strategies:=$(__git_list_merge_strategies)} + [ -n "$__git_merge_strategies" ] || + __git_merge_strategies=$(__git_list_merge_strategies) } __git_complete_revlist_file () @@ -854,7 +855,8 @@ __git_list_all_commands () __git_all_commands= __git_compute_all_commands () { - : ${__git_all_commands:=$(__git_list_all_commands)} + [ -n "$__git_all_commands" ] || + __git_all_commands=$(__git_list_all_commands) } __git_list_porcelain_commands () @@ -947,7 +949,8 @@ __git_porcelain_commands= __git_compute_porcelain_commands () { __git_compute_all_commands - : ${__git_porcelain_commands:=$(__git_list_porcelain_commands)} + [ -n "$__git_porcelain_commands" ] || + __git_porcelain_commands=$(__git_list_porcelain_commands) } __git_pretty_aliases ()
-- 1.7.9