Re: [PATCH 3/4] completion: reflog with implicit "show"
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 26, 2024, 17:57 UTC
- Message-ID
- <xmqq8r4cnfju.fsf@gitster.g>
- In-Reply-To
- <5991b58c-770c-4aaa-bce5-f396d9f7f16f@gmail.com>
Rubén Justo <rjusto@gmail.com> writes:
Show 23 quoted lines
> When no subcommand is specified to "reflog", we assume "show" [1]: > > $ git reflog -h > usage: git reflog [show] [<log-options>] [<ref>] > ... > > We are not completing correctly this implicit uses of "show": > > With ... > > $ git checkout -b default > > ... we are not completing "default": > > $ git reflog def<TAB><TAB> > > And we are incorrectly returning the "subcommands" when: > > $ git reflog default <TAB><TAB> > delete expire show > > Let's use __gitcomp_subcommand to correctly handle implicit > subcommands.
As with a good bug report, if you are showing an "incorrect" behaviour, you should also illustrate what you think is the "correct" behaviour (see below).
Show 28 quoted lines
> 1. cf39f54efc (git reflog show, 2007-02-08)
>
> Signed-off-by: Rubén Justo <rjusto@gmail.com>
> ---
> contrib/completion/git-completion.bash | 9 ++++-----
> t/t9902-completion.sh | 8 ++++++++
> 2 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 5f2e904b56..c41f25aa80 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2448,13 +2448,12 @@ _git_rebase ()
> _git_reflog ()
> {
> local subcommands="show delete expire"
> - local subcommand="$(__git_find_on_cmdline "$subcommands")"
>
> - if [ -z "$subcommand" ]; then
> - __gitcomp "$subcommands"
> - else
> - __git_complete_refs
> + if __gitcomp_subcommand "$subcommands"; then
> + return
> fi
> +
> + __git_complete_refs
> }So, when we see something that could be a subcommand we complete it as a subcommand and return. In your example, how should
$ git reflog def<TAB>
work? We try to see if there is a subcommand that begins with "def", we see nothing matching, and then run __git_complete_refs? What if the branch you created earlier were not named "default" but, say, "delmonte", and you did "git reflog del<TAB>"? Shouldn't the user be offered "delete" and "delmonte" as potential completions?
Show 13 quoted lines
> __git_send_email_confirm_options="always never auto cc compose" > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > index aa9a614de3..231e17f378 100755 > --- a/t/t9902-completion.sh > +++ b/t/t9902-completion.sh > @@ -2618,6 +2618,14 @@ test_expect_success 'git clone --config= - value' ' > EOF > ' > > +test_expect_success 'git reflog show' ' > + test_when_finished "git checkout -" && > + git checkout -b shown && > + test_completion "git reflog sho" "show " &&
IOW, shouldn't this offer both show and shown?
Show 6 quoted lines
> + test_completion "git reflog show sho" "shown " && > + test_completion "git reflog shown sho" "shown " > +' > + > test_expect_success 'options with value' ' > test_completion "git merge -X diff-algorithm=" <<-\EOF