]> git.ipfire.org Git - thirdparty/git.git/commitdiff
completion: bisect: complete custom terms and related options
authorBritton Leo Kerin <britton.kerin@gmail.com>
Tue, 6 Feb 2024 21:50:44 +0000 (12:50 -0900)
committerJunio C Hamano <gitster@pobox.com>
Tue, 6 Feb 2024 23:11:46 +0000 (15:11 -0800)
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>
contrib/completion/git-completion.bash
t/t9902-completion.sh

index 06d0b156e7b00613e5e9e326fba660e19a9065fb..6a3d9c7760039e152eeed445633b4b13b74cf59d 100644 (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
                ;;
        *)
index 7388c892cf51c528999eb0d9a35939ef0377f69c..304903b1a73cc26b3888c16e0594e358fa8dbdab 100755 (executable)
@@ -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