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 ;; 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