Re: [PATCH 3/4] completion: reflog with implicit "show"
- From
Rubén Justo <rjusto@gmail.com>
- Date
- Jan 26, 2024, 20:20 UTC
- Message-ID
- <dd106d87-3363-426a-90a2-16e1f2d04661@gmail.com>
- In-Reply-To
- <xmqq8r4cnfju.fsf@gitster.g>
On 26-ene-2024 09:57:25, Junio C Hamano wrote:
Show 85 quoted lines
> Rubén Justo <rjusto@gmail.com> writes:
>
> > 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).
>
> > 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?
>
> > __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?What should we do?
When the user have a branch "show":
$ git checkout -b show $ git reflog sho<TAB><TAB>
And with:
$ git reflog <TAB><TAB>
Should we suggest the subcommands alongside the branches?
I thought about this, and it's a can of worms. I concluded that a sane an instructive for the user approach is to first try the subcommands and if no option is found, then try the implicit "show".
Maybe I'm overthinking it ...
Show 7 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
Thanks.