1
0
mirror of https://github.com/git/git synced 2024-07-02 15:48:44 +00:00

completion: reflog with implicit "show"

When no subcommand is specified to "reflog", we assume "show" [1]:

    $ git reflog -h
    usage: git reflog [show] [<log-options>] [<ref>]
    ...

This implicit "show" is not being completed correctly:

    $ git checkout -b default
    $ git reflog def<TAB><TAB>
    ... no completion options ...

The expected result is:

    $ git reflog default

This happens because we're completing references after seeing a valid
subcommand in the command line.  This prevents the implicit "show" from
working properly, but also introduces a new problem: it keeps offering
subcommand options when the subcommand is implicit:

    $ git checkout -b explore
    $ git reflog default ex<TAB>
    ...
    $ git reflog default expire

The expected result is:

    $ git reflog default explore

To fix this, complete references even if no subcommand is present, or in
other words when the subcommand is implicit "show".

Also, only include completion options for subcommands when completing
the right position in the command line.

  1. cf39f54efc (git reflog show, 2007-02-08)

Signed-off-by: Rubén Justo <rjusto@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Rubén Justo 2024-03-02 15:37:34 +01:00 committed by Junio C Hamano
parent e02ecfcc53
commit 85452a1d4b
2 changed files with 15 additions and 5 deletions

View File

@ -2407,12 +2407,11 @@ _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
__git_complete_refs
if [ $((cword - __git_cmd_idx)) -eq 1 ]; then
__gitcompappend "$subcommands" "" "$cur" " "
fi
}

View File

@ -2618,6 +2618,17 @@ test_expect_success 'git clone --config= - value' '
EOF
'
test_expect_success 'git reflog show' '
test_when_finished "git checkout - && git branch -d shown" &&
git checkout -b shown &&
test_completion "git reflog sho" <<-\EOF &&
show Z
shown Z
EOF
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