Subject: Re: [PATCH] Provide config option to expect files outside sparse patterns

From: Derrick Stolee <[email-masked]>
Date: Tue, 22 Feb 2022 08:47:36 -0500

On 2/21/2022 9:23 PM, Elijah Newren wrote:
> On Mon, Feb 21, 2022 at 12:34 PM Johannes Schindelin
> <[email-masked]> wrote:
>>
>> Hi Elijah,
>>
>> In addition to Stolee's feedback...
>>
>> On Sun, 20 Feb 2022, Elijah Newren via GitGitGadget wrote:
>>
>>> diff --git a/config.c b/config.c
>>> index 2bffa8d4a01..68e877a1d80 100644
>>> --- a/config.c
>>> +++ b/config.c
>>> @@ -1520,6 +1520,11 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
>>>               return 0;
>>>       }
>>>
>>> +     if (!strcmp(var, "core.expectfilesoutsidesparsepatterns")) {
>>> +             core_expect_files_outside_sparse_patterns = git_config_bool(var, value);
>>> +             return 0;
>>> +     }
>>
>> The `core` section is already quite crowded (for which I am partially
>> responsible, of course).
>>
>> Maybe it would be a good idea to introduce the `sparse` section, using
>> `sparse.allowFilesMatchingPatterns` or `sparse.applyPatternsToWorktree =
>> false`?
> 
> That's a fair point.  At one point Stolee wanted to change from
> core.sparse* to sparse.* -- but by that point we already had users and
> would have had to deal with a bit of a migration story (and wondering
> what to do if people had both old and new config variables set
> inconsistently).
> 
> I'm not sure if it's optimal to try to keep the sparse settings
> together (thus put new ones under core), or try to avoid filling core.
> I guess if we moved towards sparse.* now, it might be an easier
> migration story if we only have two options to move.  And besides,
> we're already split between multiple sections with
> extensions.worktreeConfig, core.sparseCheckout{,Cone}, and
> index.sparse already...so maybe adding one more section would be par
> for the course.  ;-)
> 
> So, I'm leaning towards sparse.expectFilesOutsideOfPatterns, but I'd
> like to hear Stolee's thoughts too.

This has been an interesting discussion.

I think that the existence of core.sparseCheckout[Cone] isn't a good
reason to keep adding to the core.* namespace. Creating a sparse.*
namespace is a good idea. I doubt this will be the last time we want
a config option for some behavior custom to sparse-checkouts (or
virtual environments).

I agree that migrating core.sparseCheckout[Cone] to the sparse.*
namespace would need to be done carefully. In particular, we would
probably need to _always_ understand the core.* versions, but start
to prefer the sparse.* versions if there is a conflict. This work
could be delayed indefinitely, or could be offered as a project for
a new contributor (if we experienced contributors could agree on a
clear path to make this transition).

Thanks,
-Stolee