completion: bisect: complete custom terms and related options

git bisect supports the use of custom terms via the --term-(new|bad) and
--term-(old|good) options, but the completion code doesn't know about
these options or the new subcommands they define.

Add support for these options and the custom subcommands by checking for
BISECT_TERMS and adding them to the list of subcommands.  Add tests.

Signed-off-by: Britton Leo Kerin <britton.kerin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Britton Leo Kerin 2024-02-06 12:50:44 -09:00 committed by Junio C Hamano
parent e1f74dd58b
commit af8910a2d4
2 changed files with 45 additions and 2 deletions

View file

@ -1449,7 +1449,20 @@ _git_bisect ()
{
__git_has_doubledash && return
local subcommands="start bad new good old skip reset visualize replay log run help"
__git_find_repo_path
# If a bisection is in progress get the terms being used.
local term_bad term_good
if [ -f "$__git_repo_path"/BISECT_TERMS ]; then
term_bad=$(__git bisect terms --term-bad)
term_good=$(__git bisect terms --term-good)
fi
# We will complete any custom terms, but still always complete the
# more usual bad/new/good/old because git bisect gives a good error
# message if these are given when not in use, and that's better than
# silent refusal to complete if the user is confused.
local subcommands="start bad new $term_bad good old $term_good terms skip reset visualize replay log run help"
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
__git_find_repo_path
@ -1462,7 +1475,22 @@ _git_bisect ()
fi
case "$subcommand" in
bad|new|good|old|reset|skip|start)
start)
case "$cur" in
--*)
__gitcomp "--term-new --term-bad --term-old --term-good"
return
;;
*)
__git_complete_refs
;;
esac
;;
terms)
__gitcomp "--term-good --term-old --term-bad --term-new"
return
;;
bad|new|"$term_bad"|good|old|"$term_good"|reset|skip)
__git_complete_refs
;;
*)

View file

@ -1321,9 +1321,12 @@ test_expect_success 'git-bisect - when bisecting all subcommands are candidates'
test_completion "git bisect " <<-\EOF
start Z
bad Z
custom_new Z
custom_old Z
new Z
good Z
old Z
terms Z
skip Z
reset Z
visualize Z
@ -1335,6 +1338,18 @@ test_expect_success 'git-bisect - when bisecting all subcommands are candidates'
)
'
test_expect_success 'git-bisect - options to terms subcommand are candidates' '
(
cd git-bisect &&
test_completion "git bisect terms --" <<-\EOF
--term-bad Z
--term-good Z
--term-new Z
--term-old Z
EOF
)
'
test_expect_success 'git checkout - completes refs and unique remote branches for DWIM' '
test_completion "git checkout " <<-\EOF
HEAD Z