Re: [PATCH v2 1/2] sparse-checkout: custom tab completion tests
- From
Lessley Dennington <lessleydennington@gmail.com>
- Date
- Jan 4, 2022, 19:24 UTC
- Message-ID
- <8dfb06d4-480c-ced8-9de0-de3e81014453@gmail.com>
- In-Reply-To
- <CABPp-BGdr54XgCXw8k1xRCgkwBtDonyODS3O+_nS_QY3SOEFGQ@mail.gmail.com>
On 12/31/21 2:03 PM, Elijah Newren wrote:
Show 30 quoted lines
> On Fri, Dec 31, 2021 at 2:32 AM Lessley Dennington via GitGitGadget > <gitgitgadget@gmail.com> wrote: >> >> From: Lessley Dennington <lessleydennington@gmail.com> >> >> Add tests for missing/incorrect components of custom tab completion for the >> sparse-checkout command. These tests specifically highlight the following: >> >> 1. git sparse-checkout <TAB> results in an incomplete list of subcommands >> (it is missing reapply and add). >> 2. git sparse-checkout --<TAB> does not complete the help option. >> 3. Options for subcommands are not tab-completable. >> 4. git sparse-checkout set <TAB> and git sparse-checkout add <TAB> show >> both file names and directory names. > > Two thoughts on this last item: > > I completely agree that only directories should be completed in cone > mode, but completing on both might technically be considered correct > behavior for non-cone mode. However, even in non-cone mode, I kind of > like the idea of encouraging people to sparsify only on directories so > I'm totally fine with us only tab-completing directories. (I have a > bit of a disdain for non-cone mode, though, so my desire to deprecate > it might be showing through. At the very least, I'm still thinking we > should make cone mode the default in each of `sparse-checkout init`, > `sparse-checkout set`, and `clone --sparse`[1]) > > [1] https://lore.kernel.org/git/6e09ab19-7ffb-e58e-7b08-6e560b421c06@gmail.com/ > >
I'm still supportive of this 😊. I'll chat with others who are heavily involved with sparse-checkout to make sure I have buy-in. If so, I can pick it up as my next work item.
Show 143 quoted lines
> Second, and this item is unrelated to your series but your comment > made me realize it....sparse-checkout unfortunately ignores prefix and > creates a bad .git/info/sparse-checkout file. For example: > > $ git init -b main tmp > $ cd tmp > $ mkdir -p a/b/c > $ touch a/b/c/d a/b/c/e > $ git add a/ > $ git commit -m "initial" > $ cd a/ # Not at the toplevel anymore > $ git sparse-checkout set --cone b/c # So we expect that a/b/c will > be the specified sparsity path > $ git -C .. sparse-checkout list > b/c > $ cat ../.git/info/sparse-checkout > /* > !/*/ > /b/ > !/b/*/ > /b/c/ > $ pwd -P > pwd: error retrieving current directory: getcwd: cannot access parent > directories: No such file or directory > > I think the loss of the current working directory will be fixed by the > en/keep-cwd directory (currently in next and marked for merging to > master), but the fact that the wrong paths end up in the > sparse-checkout file is unfortunate. It basically means that the > `set` and `add` subcommands of `sparse-checkout` can only be safely > run from the toplevel directory. > >> Although these tests currently fail, they will succeed with the >> sparse-checkout modifications in git-completion.bash in the next commit in >> this series. >> >> Signed-off-by: Lessley Dennington <lessleydennington@gmail.com> >> --- >> t/t9902-completion.sh | 85 +++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 85 insertions(+) >> >> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh >> index 518203fbe07..51d0f2d93a1 100755 >> --- a/t/t9902-completion.sh >> +++ b/t/t9902-completion.sh >> @@ -1447,6 +1447,91 @@ test_expect_success 'git checkout - with --detach, complete only references' ' >> EOF >> ' >> >> +test_expect_failure 'sparse-checkout completes subcommands' ' >> + test_completion "git sparse-checkout " <<-\EOF >> + list Z >> + init Z >> + set Z >> + add Z >> + reapply Z >> + disable Z >> + EOF >> +' >> + >> +test_expect_failure 'sparse-checkout completes options' ' >> + test_completion "git sparse-checkout --" <<-\EOF >> + --help Z >> + EOF >> +' >> + >> +test_expect_failure 'sparse-checkout completes subcommand options' ' >> + test_completion "git sparse-checkout init --" <<-\EOF && >> + --cone Z >> + --no-cone Z >> + --sparse-index Z >> + --no-sparse-index Z >> + EOF >> + >> + test_completion "git sparse-checkout set --" <<-\EOF && >> + --cone Z >> + --no-cone Z >> + --sparse-index Z >> + --no-sparse-index Z >> + --stdin Z >> + EOF >> + >> + test_completion "git sparse-checkout reapply --" <<-\EOF && >> + --cone Z >> + --no-cone Z >> + --sparse-index Z >> + --no-sparse-index Z >> + EOF >> + >> + test_completion "git sparse-checkout add --" <<-\EOF >> + --stdin Z >> + EOF >> +' >> + >> +test_expect_failure 'sparse-checkout completes directory names' ' >> + # set up sparse-checkout repo >> + git init sparse-checkout && >> + ( >> + cd sparse-checkout && >> + mkdir -p folder1/0/1 folder2/0 folder3 && >> + touch folder1/0/1/t.txt && >> + touch folder2/0/t.txt && >> + touch folder3/t.txt && >> + git add . && >> + git commit -am "Initial commit" >> + ) && >> + >> + # initialize sparse-checkout definitions >> + git -C sparse-checkout sparse-checkout init --cone && >> + git -C sparse-checkout sparse-checkout set folder1/0 folder3 && >> + >> + # test tab completion >> + ( >> + cd sparse-checkout && >> + test_completion "git sparse-checkout set f" <<-\EOF >> + folder1 Z >> + folder1/0 Z >> + folder1/0/1 Z >> + folder2 Z >> + folder2/0 Z >> + folder3 Z >> + EOF >> + ) && >> + >> + ( >> + cd sparse-checkout/folder1 && >> + test_completion "git sparse-checkout add " <<-\EOF >> + ./ Z >> + 0 Z >> + 0/1 Z >> + EOF >> + ) >> +' >> + >> test_expect_success 'git switch - with -d, complete all references' ' >> test_completion "git switch -d " <<-\EOF >> HEAD Z >> -- >> gitgitgadget > > Patch looks okay to me, but we might want to add some kind of wording > around the directories-only decision and cone vs. non-cone mode to the > commit message.
Can do! Stay tuned for v3.