threads / patch / 55958

patchcompletion: bash: fix late declaration of __git_cmd_idx

Subject: [PATCH] completion: bash: fix late declaration of __git_cmd_idx

## tl;dr

2 messages between Jun 18, 2021 and Jun 18, 2021. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Fabian Wermelinger· Jun 18, 2021, 14:02 UTC · lore

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(+)
Show changes to contrib/completion/git-completion.bash +1 −0
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
 }
-- 
2.32.0
Felipe Contreras· Jun 18, 2021, 19:09 UTC · re: Fabian Wermelinger · lore

RE: [PATCH] completion: bash: fix late declaration of __git_cmd_idx

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.
-- 
Felipe Contreras

← back to recent threads