git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 1/2] sparse-checkout: list folders in cone mode

From
Elijah Newren <newren@gmail.com>
Date
Dec 27, 2019, 21:37 UTC
Message-ID
<CABPp-BGGfwR3r1YZuyeQN1=WqokSBdcHeFWkkZ2OD_S9Enfb0w@mail.gmail.com>
In-Reply-To
<d6f4f404866e30e9de89991bb39f2908facb30ae.1577472469.git.gitgitgadget@gmail.com>

On Fri, Dec 27, 2019 at 10:47 AM Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com> wrote:

Show 5 quoted lines
>
> From: Derrick Stolee <dstolee@microsoft.com>
>
> When core.sparseCheckoutCone is enabled, the 'git sparse-checkout set'
> command takes a list of folders as input, then creates an ordered
s/folders/directories/
> list of sparse-checkout patterns such that those folders are
s/folders/directories/
> recursively included and all sibling entries along the parent folders
again here.
> are also included. Listing the patterns is less user-friendly than the
> folders themselves.
and here.
>
> In cone mode, and as long as the patterns match the expected cone-mode
> pattern types, change the output of 'git sparse-checkout list' to only
> show the folders that created the patterns.
and here.
Show 36 quoted lines
>
> With this change, the following piped commands would not change the
> working directory:
>
>         git sparse-checkout list | git sparse-checkout set --stdin
>
> The only time this would not work is if core.sparseCheckoutCone is
> true, but the sparse-checkout file contains patterns that do not
> match the expected pattern types for cone mode.
>
> Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
> ---
>  Documentation/git-sparse-checkout.txt | 11 ++++++++++-
>  builtin/sparse-checkout.c             | 21 +++++++++++++++++++++
>  t/t1091-sparse-checkout-builtin.sh    | 11 +++++++++++
>  3 files changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/git-sparse-checkout.txt b/Documentation/git-sparse-checkout.txt
> index 9c3c66cc37..dcca9ee826 100644
> --- a/Documentation/git-sparse-checkout.txt
> +++ b/Documentation/git-sparse-checkout.txt
> @@ -28,7 +28,7 @@ THE FUTURE.
>  COMMANDS
>  --------
>  'list'::
> -       Provide a list of the contents in the sparse-checkout file.
> +       Describe the patterns in the sparse-checkout file.
>
>  'init'::
>         Enable the `core.sparseCheckout` setting. If the
> @@ -150,6 +150,15 @@ expecting patterns of these types. Git will warn if the patterns do not match.
>  If the patterns do match the expected format, then Git will use faster hash-
>  based algorithms to compute inclusion in the sparse-checkout.
>
> +In the cone mode case, the `git sparse-checkout list` subcommand will list the
> +folders that define the recursive patterns. For the example sparse-checkout file
and here.
Show 69 quoted lines
> +above, the output is as follows:
> +
> +--------------------------
> +$ git sparse-checkout list
> +A/B/C
> +--------------------------
> +
>  If `core.ignoreCase=true`, then the pattern-matching algorithm will use a
>  case-insensitive check. This corrects for case mismatched filenames in the
>  'git sparse-checkout set' command to reflect the expected cone in the working
> diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
> index 5d62f7a66d..b3bed891cb 100644
> --- a/builtin/sparse-checkout.c
> +++ b/builtin/sparse-checkout.c
> @@ -53,6 +53,8 @@ static int sparse_checkout_list(int argc, const char **argv)
>
>         memset(&pl, 0, sizeof(pl));
>
> +       pl.use_cone_patterns = core_sparse_checkout_cone;
> +
>         sparse_filename = get_sparse_checkout_filename();
>         res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL);
>         free(sparse_filename);
> @@ -62,6 +64,25 @@ static int sparse_checkout_list(int argc, const char **argv)
>                 return 0;
>         }
>
> +       if (pl.use_cone_patterns) {
> +               int i;
> +               struct pattern_entry *pe;
> +               struct hashmap_iter iter;
> +               struct string_list sl = STRING_LIST_INIT_DUP;
> +
> +               hashmap_for_each_entry(&pl.recursive_hashmap, &iter, pe, ent) {
> +                       /* pe->pattern starts with "/", skip it */
> +                       string_list_insert(&sl, pe->pattern + 1);
> +               }
> +
> +               string_list_sort(&sl);
> +
> +               for (i = 0; i < sl.nr; i++)
> +                       printf("%s\n", sl.items[i].string);
> +
> +               return 0;
> +       }
> +
>         write_patterns_to_file(stdout, &pl);
>         clear_pattern_list(&pl);
>
> diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
> index 6f7e2d0c9e..37f6d8fa90 100755
> --- a/t/t1091-sparse-checkout-builtin.sh
> +++ b/t/t1091-sparse-checkout-builtin.sh
> @@ -246,6 +246,17 @@ test_expect_success 'cone mode: init and set' '
>         test_cmp expect dir
>  '
>
> +test_expect_success 'cone mode: list' '
> +       cat >expect <<-EOF &&
> +               folder1
> +               folder2
> +       EOF
> +       git -C repo sparse-checkout set --stdin <expect &&
> +       git -C repo sparse-checkout list >actual 2>err &&
> +       test_must_be_empty err &&
> +       test_cmp expect actual
> +'
> +
>  test_expect_success 'cone mode: set with nested folders' '

There's another one here but that's just the context area, so it'd be a separate patch in a separate cleanup series...

>         git -C repo sparse-checkout set deep deep/deeper1/deepest 2>err &&
>         test_line_count = 0 err &&
> --
The rest looks good
Previous: Derrick Stolee via GitGitGadgetNext: Derrick Stolee via GitGitGadget
Message 8 of 18 in “sparse-checkout: list directories in cone mode”
  1. 0/1 sparse-checkout: list directories in cone modeDerrick Stolee via GitGitGadget, Dec 26, 2019
  2. 1/1 sparse-checkout: list folders in cone modeDerrick Stolee via GitGitGadget, Dec 26, 2019
  3. Junio C HamanoDec 26, 2019
  4. Derrick StoleeDec 27, 2019
  5. Elijah NewrenDec 27, 2019
  6. 0/2 sparse-checkout: list directories in cone modeDerrick Stolee via GitGitGadget, Dec 27, 2019
  7. 1/2 sparse-checkout: list folders in cone modeDerrick Stolee via GitGitGadget, Dec 27, 2019
  8. Elijah NewrenDec 27, 2019
  9. 2/2 sparse-checkout: document interactions with submodulesDerrick Stolee via GitGitGadget, Dec 27, 2019
  10. Eric SunshineDec 27, 2019
  11. Derrick StoleeDec 30, 2019
  12. Elijah NewrenDec 27, 2019
  13. Junio C HamanoDec 27, 2019
  14. 0/2 sparse-checkout: list directories in cone modeDerrick Stolee via GitGitGadget, Dec 30, 2019
  15. 1/2 sparse-checkout: list directories in cone modeDerrick Stolee via GitGitGadget, Dec 30, 2019
  16. 2/2 sparse-checkout: document interactions with submodulesDerrick Stolee via GitGitGadget, Dec 30, 2019
  17. Elijah NewrenDec 30, 2019
  18. Elijah NewrenDec 27, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.