completion: improve handling of --detach in checkout

Just like git switch, we should not complete DWIM remote branch names
if --detach has been specified. To avoid this, refactor _git_checkout in
a similar way to _git_switch.

Note that we don't simply clear dwim_opt when we find -d or --detach, as
we will be adding other modes and checks, making this flow easier to
follow.

Update the previously failing tests to show that the breakage has been
resolved.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jacob Keller 2020-05-28 11:10:45 -07:00 committed by Junio C Hamano
parent 68d97c7fdd
commit 6d76a5cc7f
2 changed files with 8 additions and 5 deletions

View file

@ -1489,7 +1489,12 @@ _git_checkout ()
;;
*)
local dwim_opt="$(__git_checkout_default_dwim_mode)"
__git_complete_refs $dwim_opt
if [ -n "$(__git_find_on_cmdline "-d --detach")" ]; then
__git_complete_refs --mode="refs"
else
__git_complete_refs $dwim_opt --mode="refs"
fi
;;
esac
}

View file

@ -1371,8 +1371,7 @@ test_expect_success 'git switch - with --detach, complete all references' '
EOF
'
#TODO: checkout --detach incorrectly includes DWIM remote branch names
test_expect_failure 'git checkout - with --detach, complete only references' '
test_expect_success 'git checkout - with --detach, complete only references' '
test_completion "git checkout --detach " <<-\EOF
HEAD Z
master Z
@ -1394,8 +1393,7 @@ test_expect_success 'git switch - with -d, complete all references' '
EOF
'
#TODO: checkout -d incorrectly includes DWIM remote branch names
test_expect_failure 'git checkout - with -d, complete only references' '
test_expect_success 'git checkout - with -d, complete only references' '
test_completion "git checkout -d " <<-\EOF
HEAD Z
master Z