On Mon, Feb 05, 2024 at 05:09:26PM -0900, Britton Leo Kerin wrote: > 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@xxxxxxxxx> > --- > contrib/completion/git-completion.bash | 32 ++++++++++++++++++++++++-- > t/t9902-completion.sh | 15 ++++++++++++ > 2 files changed, 45 insertions(+), 2 deletions(-) > > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index 06d0b156e7..6a3d9c7760 100644 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -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 > ;; > *) > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > index 7388c892cf..409a5a49d5 100755 > --- a/t/t9902-completion.sh > +++ b/t/t9902-completion.sh > @@ -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 > @@ -1334,6 +1337,18 @@ test_expect_success 'git-bisect - when bisecting all subcommands are candidates' > EOF > ) > ' Nit: missing a newline between the tests... > +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 > + ) > +' > + > ... wheeras here we have a newline too many now. Patrick > test_expect_success 'git checkout - completes refs and unique remote branches for DWIM' ' > test_completion "git checkout " <<-\EOF > -- > 2.43.0 >
Attachment:
signature.asc
Description: PGP signature