completion(switch/checkout): treat --track and -t the same

When `git switch --track ` is to be completed, only remote refs are
eligible because that is what the `--track` option targets.

And when the short-hand `-t` is used instead, the same _should_ happen.
Let's make it so.

Note that the bug exists both in the completions of `switch` and
`completion`, even if it manifests in slightly different ways: While
the completion of `git switch -t ` will not even look at remote refs,
the completion of `git checkout -t ` will look at both remote _and_
local refs. Both should look only at remote refs.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 2023-09-08 12:28:43 +00:00 committed by Junio C Hamano
parent 0d1bd1dfb3
commit 9f892830d6
2 changed files with 12 additions and 4 deletions

View File

@ -1607,7 +1607,7 @@ _git_checkout ()


if [ -n "$(__git_find_on_cmdline "-b -B -d --detach --orphan")" ]; then if [ -n "$(__git_find_on_cmdline "-b -B -d --detach --orphan")" ]; then
__git_complete_refs --mode="refs" __git_complete_refs --mode="refs"
elif [ -n "$(__git_find_on_cmdline "--track")" ]; then elif [ -n "$(__git_find_on_cmdline "-t --track")" ]; then
__git_complete_refs --mode="remote-heads" __git_complete_refs --mode="remote-heads"
else else
__git_complete_refs $dwim_opt --mode="refs" __git_complete_refs $dwim_opt --mode="refs"
@ -2484,7 +2484,7 @@ _git_switch ()


if [ -n "$(__git_find_on_cmdline "-c -C -d --detach")" ]; then if [ -n "$(__git_find_on_cmdline "-c -C -d --detach")" ]; then
__git_complete_refs --mode="refs" __git_complete_refs --mode="refs"
elif [ -n "$(__git_find_on_cmdline "--track")" ]; then elif [ -n "$(__git_find_on_cmdline "-t --track")" ]; then
__git_complete_refs --mode="remote-heads" __git_complete_refs --mode="remote-heads"
else else
__git_complete_refs $dwim_opt --mode="heads" __git_complete_refs $dwim_opt --mode="heads"

View File

@ -1622,14 +1622,22 @@ test_expect_success 'git checkout - with -d, complete only references' '
' '


test_expect_success 'git switch - with --track, complete only remote branches' ' test_expect_success 'git switch - with --track, complete only remote branches' '
test_completion "git switch --track " <<-\EOF test_completion "git switch --track " <<-\EOF &&
other/branch-in-other Z
other/main-in-other Z
EOF
test_completion "git switch -t " <<-\EOF
other/branch-in-other Z other/branch-in-other Z
other/main-in-other Z other/main-in-other Z
EOF EOF
' '


test_expect_success 'git checkout - with --track, complete only remote branches' ' test_expect_success 'git checkout - with --track, complete only remote branches' '
test_completion "git checkout --track " <<-\EOF test_completion "git checkout --track " <<-\EOF &&
other/branch-in-other Z
other/main-in-other Z
EOF
test_completion "git checkout -t " <<-\EOF
other/branch-in-other Z other/branch-in-other Z
other/main-in-other Z other/main-in-other Z
EOF EOF