On 12/30/21 7:50 AM, Derrick Stolee wrote:
+__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"
+ ;;
+ esac
This part fixes the --<tab> completion. I suppose if someone
did "-<tab>" then nothing would show up?
It actually shows a list of files that contain -- (if any exist).
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.
Thanks, I'll give this a go!
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.
Will correct in v2.
-Lessley