On 26-ene-2024 09:57:25, Junio C Hamano wrote: > Rubén Justo <rjusto@xxxxxxxxx> 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@xxxxxxxxx> > > --- > > 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 ... > > > + 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.