On Thu, Jan 27, 2022 at 1:21 PM Lessley Dennington via GitGitGadget <gitgitgadget@xxxxxxxxx> wrote: > > From: Lessley Dennington <lessleydennington@xxxxxxxxx> > > Fix custom tab completion for the sparse-checkout command. This will > ensure: > > 1. The full list of subcommands is provided when users enter git > sparse-checkout <TAB>. > 2. Subcommand options are tab-completable. > 3. A list of directories (but not files) is provided when users enter git > sparse-checkout add <TAB> or git sparse-checkout set <TAB> in cone mode > only. In non-cone mode, these commands will continue to complete both > directory and file names. > > Failing tests that were added in the previous commit to verify these > scenarios are now passing with these updates. > > Signed-off-by: Lessley Dennington <lessleydennington@xxxxxxxxx> > --- > contrib/completion/git-completion.bash | 15 ++++++++------- > t/t9902-completion.sh | 4 ++-- > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index c82ccaebcc7..a920cdab201 100644 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -2988,21 +2988,22 @@ _git_show_branch () > > _git_sparse_checkout () > { > - local subcommands="list init set disable" > + local subcommands="list init set disable add reapply" > local subcommand="$(__git_find_on_cmdline "$subcommands")" > + > if [ -z "$subcommand" ]; then > __gitcomp "$subcommands" > return > fi > > case "$subcommand,$cur" in > - init,--*) > - __gitcomp "--cone" > - ;; > - set,--*) > - __gitcomp "--stdin" > + *,--*) > + __gitcomp_builtin sparse-checkout_$subcommand "" "--" > ;; > - *) > + set,*|add,*) > + if [ $(__git config core.sparseCheckoutCone) ]; then > + __git_complete_index_file "--directory" > + fi --directory only affects how untracked files are presented in `git ls-files` (which _git_complete_index_file uses), and you're not asking for untracked paths at all here. So you've got a useless flag. Testing this commit out, I can verify that it completes on all tracked paths in the index. Perhaps that was an intended intermediate step, but if so the commit message needs to be changed since it claims this commit is doing something else. There's also a problem in that `git sparse-checkout --cone path<TAB>` is not using this codepath. If the user specifies --cone, then we should give them cone-mode-style completion the same as if they already have the config setting set. Or, we at least need to mention in the commit message that we don't yet correctly check for the `--cone` option to get the right style of completion and are leaving it for future work. > ;; > esac > } > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > index 6004d854102..f56ba3f64c9 100755 > --- a/t/t9902-completion.sh > +++ b/t/t9902-completion.sh > @@ -1447,7 +1447,7 @@ test_expect_success 'git checkout - with --detach, complete only references' ' > EOF > ' > > -test_expect_failure 'sparse-checkout completes subcommands' ' > +test_expect_success 'sparse-checkout completes subcommands' ' > test_completion "git sparse-checkout " <<-\EOF > list Z > init Z > @@ -1458,7 +1458,7 @@ test_expect_failure 'sparse-checkout completes subcommands' ' > EOF > ' > > -test_expect_failure 'cone mode sparse-checkout completes directory names' ' > +test_expect_success 'cone mode sparse-checkout completes directory names' ' > # set up sparse-checkout repo > git init sparse-checkout && > ( > -- > gitgitgadget >