Re: [PATCH v2 1/2] sparse-checkout: custom tab completion tests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 31, 2021 at 2:32 AM Lessley Dennington via GitGitGadget
<gitgitgadget@xxxxxxxxx> wrote:
>
> From: Lessley Dennington <lessleydennington@xxxxxxxxx>
>
> 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@xxxxxxxxx/


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@xxxxxxxxx>
> ---
>  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.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux