summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/completion/git-completion.bash21
-rwxr-xr-xt/t9902-completion.sh9
2 files changed, 17 insertions, 13 deletions
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 9dd0412ecc..6df1e8013d 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 7a0927b51f..ce7b46c9d6 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