threads / bug / 52237

Bug in bash completion for git rebase --onto

Subject: Bug in bash completion for git rebase --onto

## tl;dr

5 messages between Nov 11, 2019 and Nov 13, 2019.

replies: 4people: 3as markdown or json

Paul Jolly· Nov 11, 2019, 19:51 UTC · lore
Hi,

The bash completion for git rebase --onto seems to have been broken by commit 2b9bd488ae09dc89f02be7d73f3710ee2ea7325c

Previously (v2.23.0), hitting tab after
    git rebase --on
gives:
    git rebase --onto

(note trailing space) hitting tab again offers a list of potential refs onto which to rebase.

As of 2b9bd488ae09dc89f02be7d73f3710ee2ea7325c, hitting tab after:
    git rebase --on
gives:
    git rebase --onto=

but then hitting tab again offers the current directory contents as candidates, i.e. not git ref candidates as they should be.

Note the adding of a trailing '=' is, I think, more correct/robust than the trailing space so I don't disagree with that change. It's just the failure to offer git ref candidates that is the problem.

Thanks,
Paul
Denton Liu· Nov 11, 2019, 21:25 UTC · re: Paul Jolly · lore

[PATCH] completion: learn to complete `git rebase --onto=`

In 2b9bd488ae ("completion: teach rebase to use __gitcomp_builtin", 2019-09-12), the completion script learned to complete rebase using __gitcomp_builtin(). However, this resulted in `--onto=` being suggested instead of `--onto `.

Before, when there was a space, we'd start a new word and, as a result, fallback to __git_complete_refs() and `--onto` would be completed this way. However, now we match the `--*` case which does not know how to offer completions for refs.

Teach _git_rebase() to complete refs in the `--onto=` case so that we fix this regression.

Reported-by: Paul Jolly <paul@myitcv.io>
Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
Thanks for reporting the bug, Paul. I overlooked this case when I made
the commit that you pointed out.
 contrib/completion/git-completion.bash | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 7b1ab46f0b..2b644056af 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2021,6 +2021,10 @@ _git_rebase ()
 		__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
 		return
 		;;
+	--onto=*)
+		__git_complete_refs --cur="${cur##--onto=}"
+		return
+		;;
 	--*)
 		__gitcomp_builtin rebase "" \
 			"$__git_rebase_interactive_inprogress_options"
-- 
2.24.0.300.g722ba42680
Junio C Hamano· Nov 12, 2019, 04:46 UTC · re: Denton Liu · lore

Re: [PATCH] completion: learn to complete `git rebase --onto=`

Denton Liu <liu.denton@gmail.com> writes:
> Before, when there was a space, we'd start a new word and, as a result,
> fallback to __git_complete_refs() and `--onto` would be completed this
> way. However, now we match the `--*` case which does not know how to
> offer completions for refs.
Very well explained.  Thanks, will queue.
Denton Liu· Nov 12, 2019, 18:05 UTC · re: Junio C Hamano · lore

Re: [PATCH] completion: learn to complete `git rebase --onto=`

Hi Junio,
On Tue, Nov 12, 2019 at 01:46:33PM +0900, Junio C Hamano wrote:
Show 8 quoted lines
> Denton Liu <liu.denton@gmail.com> writes:
> 
> > Before, when there was a space, we'd start a new word and, as a result,
> > fallback to __git_complete_refs() and `--onto` would be completed this
> > way. However, now we match the `--*` case which does not know how to
> > offer completions for refs.
> 
> Very well explained.  Thanks, will queue.

Could you please queue this on the tip of 'dl/complete-rebase-and-archive' since it fixes a regression introduced in that branch?

Thanks,
Denton
Junio C Hamano· Nov 13, 2019, 01:11 UTC · re: Denton Liu · lore

Re: [PATCH] completion: learn to complete `git rebase --onto=`

Denton Liu <liu.denton@gmail.com> writes:
Show 13 quoted lines
> On Tue, Nov 12, 2019 at 01:46:33PM +0900, Junio C Hamano wrote:
>> Denton Liu <liu.denton@gmail.com> writes:
>> 
>> > Before, when there was a space, we'd start a new word and, as a result,
>> > fallback to __git_complete_refs() and `--onto` would be completed this
>> > way. However, now we match the `--*` case which does not know how to
>> > offer completions for refs.
>> 
>> Very well explained.  Thanks, will queue.
>
> Could you please queue this on the tip of
> 'dl/complete-rebase-and-archive' since it fixes a regression introduced
> in that branch?

The topic dl/complete-rebase-onto, which has this patch, is built directly on top of that topic. Since we may need to rewrite the patch when further review comments come in, I'd prefer to leave it separate from the other topic (which must not be rewritten) at least for now.

Thanks.

← back to recent threads