From: Jacob Keller <jacob.keller@xxxxxxxxx> With no options, git switch only allows switching branches or DWIM to create a local branch tracking a remote branch of the same name. However, tab completion will expand "git switch <TAB>" to any local reference, including pseudorefs like HEAD, or tags. Add a test case which highlights this failure, which will be fixed in a future refactoring of git switch completion support. Signed-off-by: Jacob Keller <jacob.keller@xxxxxxxxx> --- t/t9902-completion.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 03e8188f023d..af4661cbcc73 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -1240,6 +1240,19 @@ test_expect_success '__git_complete_fetch_refspecs - fully qualified & prefix' ' test_cmp expected out ' +# TODO: git switch by default should only include local branches and anything which +# would be understood by the DWIM logic. Currently it will complete most +# references including pseudorefs like HEAD and FETCH_HEAD, as well as tags. +# These should not be completed unless certain options have been enabled. +test_expect_failure 'git switch - with no options, complete local branches and unique remote branch names for DWIM logic' ' + test_completion "git switch " <<-\EOF + branch-in-other Z + master Z + master-in-other Z + matching-branch Z + EOF +' + test_expect_success 'git switch - with --no-guess, complete only local branches' ' test_completion "git switch --no-guess " <<-\EOF master Z -- 2.25.2