Subject: Re: [RFC PATCH] fetch-pack: lazy fetch using tree:0

From: Taylor Blau <[email-masked]>
Date: Thu, 26 Mar 2020 13:50:58 -0600

Hi Peff,

On Fri, Mar 20, 2020 at 02:12:14AM -0400, Jeff King wrote:
> On Thu, Mar 19, 2020 at 10:44:39AM -0700, Jonathan Tan wrote:
> >  - Some hosts like GitHub support some partial clone filters, but not
> >    "tree:0".
>
> Yes, this is going to fail against GitHub servers, just like it would
> for older servers. One way to prevent that would be to use a "blob"
> filter if that's what we originally partial-cloned with. I don't know if
> that information always reliably makes it into this code path, though.
> I think I'd prefer a capability-based fix in the long run.
>
> We may support "tree:0" eventually at GitHub. It's quick to compute with
> bitmaps, just like "blob:none" is. But "tree:1" isn't.

I'm rolling this out shortly :).

> One side note (for Taylor, cc'd): our patches elsewhere to limit the
> allowed filters don't make it possible to express the difference between
> "tree:0" and "tree:1". It may be worth thinking about that, especially
> if it influences the config schema (since we'll have to support it
> forever once it makes it into a release).

They do now, mostly thanks to Peff's original thinking about separating
out each filter choice into its own subsection, so that we can write not
just:

  [uploadpack "filter.tree:depth"]
    allow = true

but also:

  [uploadpack "filter.tree:depth"]
    allow = true
    maxDepth = <n>

I have some patches that I'm rolling out to GitHub in the next day or so
that do just that. I think that we will likely just support the no-trees
version of this filter (i.e., '--filter=tree:0'), since that is the only
case that is helped by having up-to-date bitmaps enabled. I assume that
other administrators will do the same.

I'm going to send these patches upstream in the not-too-distant future,
because I want to address the original issues that I talked about in my
RFC about adding these filter subsections to 'upload-pack's
configuration in the first place in [1].

My hope is that I can do that while these patches are being vetted in
the wild before I send them to the list.

Thanks,
Taylor

[1]: https://lore.kernel.org/git/[email-masked]/