Message ID | 20210618140256.256481-1-fabianw@mavt.ethz.ch (mailing list archive) |
---|---|
State | Accepted |
Commit | cea232194d4da32696df26f9b5ad00d5624621db |
Headers | show |
Series | completion: bash: fix late declaration of __git_cmd_idx | expand |
Fabian Wermelinger wrote: > A recent update to contrib/completion/git-completion.bash causes bash to fail > auto complete custom commands that are wrapped with __git_func_wrap. Declaring > __git_cmd_idx=0 inside __git_func_wrap resolves the issue. I was about to say the idx should be 1, and that fixes the issue, but actually 0 is more correct, since when we do __git_complete there's actually no real command. In the future we might want to improve __git_complete to manufacture a real command since some completions do check the command at __git_cmd_idx (e.g. __git_complete_remote_or_refspec), and then set __git_cmd_idx to 1. But for now your patch fixes the issue better than my previous patch [1], however, it's still missing the zsh part. I've sent an update patch with the best of both [2]. Cheers. [1] https://lore.kernel.org/git/20210618182518.697912-2-felipe.contreras@gmail.com/ [2] https://lore.kernel.org/git/20210618185832.700477-1-felipe.contreras@gmail.com/ Cheers.
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index b50c5d0ea3..ca5b456173 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -3512,6 +3512,7 @@ fi __git_func_wrap () { local cur words cword prev + local __git_cmd_idx=0 _get_comp_words_by_ref -n =: cur words cword prev $1 }
A recent update to contrib/completion/git-completion.bash causes bash to fail auto complete custom commands that are wrapped with __git_func_wrap. Declaring __git_cmd_idx=0 inside __git_func_wrap resolves the issue. Signed-off-by: Fabian Wermelinger <fabianw@mavt.ethz.ch> --- Fixes `bash: [: -lt: unary operator expected` error for tab completions of wrapped `git` commands. For example, assume the convenience command `gaa` defined in a shell script as ```bash git aa "$@" ``` where `git aa` is an alias to `git add --all`. Then `gaa` is wrapped for bash completion like ```bash __git_complete gaa _git_add ``` For this example, the current bash completion fails at `contrib/completion/git-completion.bash:1190` due to empty local variable `c` as `__git_cmd_idx` is empty at the definition in `contrib/completion/git-completion.bash:1179`. Defining `__git_cmd_idx=0` earlier in `__git_func_wrap` attempts to solve this problem. contrib/completion/git-completion.bash | 1 + 1 file changed, 1 insertion(+)