Re: [PATCH 2/2] sparse-checkout: custom tab completion
- From
Derrick Stolee <stolee@gmail.com>
- Date
- Dec 30, 2021, 13:50 UTC
- Message-ID
- <c79ccf4a-4da9-1c60-32eb-124d3fa94400@gmail.com>
- In-Reply-To
- <ab51236d18ce10ada89e8cde85f678130a0ab1fd.1640824351.git.gitgitgadget@gmail.com>
On 12/29/2021 7:32 PM, Lessley Dennington via GitGitGadget wrote:
Show 47 quoted lines
> From: Lessley Dennington <lessleydennington@gmail.com>
>
> Fix custom tab completion for sparse-checkout command. This will ensure:
>
> 1. The full list of subcommands is provided when users enter git
> sparse-checkout <TAB>.
> 2. The --help option is tab-completable.
> 3. Subcommand options are tab-completable.
> 4. A list of directories (but not files) is provided when users enter git
> sparse-checkout add <TAB> or git sparse-checkout set <TAB>.
>
> 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@gmail.com>
> ---
> contrib/completion/git-completion.bash | 34 +++++++++++++++++---------
> t/t9902-completion.sh | 8 +++---
> 2 files changed, 26 insertions(+), 16 deletions(-)
>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 377d6c5494a..b8f1caece83 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2986,24 +2986,34 @@ _git_show_branch ()
> __git_complete_revlist
> }
>
> +__git_sparse_checkout_init_opts="--cone --sparse-index --no-sparse-index"
> +
> _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
> + case "$cur" in
> + --*)
> + __gitcomp "--help"
> + ;;
> + *)
> + __gitcomp "$subcommands"
> + ;;
> + esacThis part fixes the --<tab> completion. I suppose if someone did "-<tab>" then nothing would show up?
Show 18 quoted lines
> fi > > - case "$subcommand,$cur" in > - init,--*) > - __gitcomp "--cone" > - ;; > - set,--*) > - __gitcomp "--stdin" > - ;; > - *) > - ;; > + case "$prev" in > + init) > + __gitcomp "$__git_sparse_checkout_init_opts" > + ;; > + add|set) > + __gitcomp "--stdin" > + __gitcomp "$(git ls-tree -d -r HEAD --name-only)"> + ;;
With the thinking of rebasing onto en/sparse-checkout-set, this could possibly be rearranged so the add|set) cases pass-through into the init) and reapply) cases (skip the ;; between) to save some duplication. Or, it is possible that doesn't work, but it might be worth a try.
Also, since you are using 'git ls-tree' and not 'git ls-files', the sparse index will not have an effect on the performance. There will be some corner cases where a directory exists in one of HEAD or the index but not the other. That's probably still the right way to go since 'git ls-files' doesn't have a way to only list directories. It just means that you probably don't need to explicitly disable the sparse index in your test.
Thanks, -Stolee