diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 9dd0412ecc1c5e..6df1e8013d7ef3 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1508,7 +1508,7 @@ _git_checkout () local prevword prevword="${words[cword-1]}" case "$prevword" in - -b|-B) + -b|-B|--orphan) # Complete local branches (and DWIM branch # remote branch names) for an option argument # specifying a new branch name. This is for @@ -1522,14 +1522,14 @@ _git_checkout () esac # At this point, we've already handled special completion for - # the arguments to -b/-B. There are 3 main things left we can - # possibly complete: - # 1) a start-point for -b/-B or -d/--detach + # the arguments to -b/-B, and --orphan. There are 3 main + # things left we can possibly complete: + # 1) a start-point for -b/-B, -d/--detach, or --orphan # 2) a remote head, for --track # 3) an arbitrary reference, possibly including DWIM names # - if [ -n "$(__git_find_on_cmdline "-b -B -d --detach")" ]; then + if [ -n "$(__git_find_on_cmdline "-b -B -d --detach --orphan")" ]; then __git_complete_refs --mode="refs" elif [ -n "$(__git_find_on_cmdline "--track")" ]; then __git_complete_refs --mode="remote-heads" @@ -2387,7 +2387,7 @@ _git_switch () local prevword prevword="${words[cword-1]}" case "$prevword" in - -c|-C) + -c|-C|--orphan) # Complete local branches (and DWIM branch # remote branch names) for an option argument # specifying a new branch name. This is for @@ -2400,8 +2400,15 @@ _git_switch () ;; esac + # Unlike in git checkout, git switch --orphan does not take + # a start point. Thus we really have nothing to complete after + # the branch name. + if [ -n "$(__git_find_on_cmdline "--orphan")" ]; then + return + fi + # At this point, we've already handled special completion for - # -c/-C. There are 3 main things left to + # -c/-C, and --orphan. There are 3 main things left to # complete: # 1) a start-point for -c/-C or -d/--detach # 2) a remote head, for --track diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 7a0927b51fdb9a..ce7b46c9d6b7ec 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -1669,15 +1669,13 @@ test_expect_success 'git switch - with --orphan completes local branch names and EOF ' -#TODO: switch --orphan does not take a start-point and thus has nothing to complete -test_expect_failure 'git switch - --orphan with branch already provided completes nothing else' ' +test_expect_success 'git switch - --orphan with branch already provided completes nothing else' ' test_completion "git switch --orphan master " <<-\EOF EOF ' -#TODO: --orphan argument completion should not include all references -test_expect_failure 'git checkout - with --orphan completes local branch names and unique remote branch names' ' +test_expect_success 'git checkout - with --orphan completes local branch names and unique remote branch names' ' test_completion "git checkout --orphan " <<-\EOF branch-in-other Z master Z @@ -1686,8 +1684,7 @@ test_expect_failure 'git checkout - with --orphan completes local branch names a EOF ' -#TODO: checkout --orphan start-point completion should not included DWIM remote unique branch names -test_expect_failure 'git checkout - --orphan with branch already provided completes local refs for a start-point' ' +test_expect_success 'git checkout - --orphan with branch already provided completes local refs for a start-point' ' test_completion "git checkout --orphan master " <<-\EOF HEAD Z master Z