From: Phillip Wood Date: Wed, 04 Feb 2026 16:55:51 GMT Subject: Re: [Outreachy PATCH v6 2/3] environment: stop using core.sparseCheckout globally Message-ID: <534b70cc-e1e9-432c-932c-73215d9a4632@gmail.com> In-Reply-To: <8645b4f5952a98ed32180466fc40a184c61081b5.1770127568.git.belkid98@gmail.com> On 03/02/2026 15:42, Olamide Caleb Bello wrote: > The config value `core.sparseCheckout` is parsed in > `git_default_core_config()` and stored globally in > `core_apply_sparse_checkout`. This could cause it to be overwritten > by another repository when different Git repositories run in the same > process. > > Move the parsed value into `struct repo_config_values` in the_repository > to retain current behaviours and move towards libifying Git. This looks good, I've left a small style comment below > diff --git a/builtin/clone.c b/builtin/clone.c > index b19b302b06..0005fd7118 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -617,13 +617,14 @@ static int git_sparse_checkout_init(const char *repo) > { > struct child_process cmd = CHILD_PROCESS_INIT; > int result = 0; > + struct repo_config_values *cfg = repo_config_values(the_repository); We normally have a blank line between the varibale declarations and statements. As you're adding a new declaration here it would be good to add a blank line as well. The same goes for dir.c and sparse-index.c below. Thanks Phillip > strvec_pushl(&cmd.args, "-C", repo, "sparse-checkout", "set", NULL); > diff --git a/dir.c b/dir.c > index b00821f294..0e05b3a383 100644 > --- a/dir.c > +++ b/dir.c > @@ -1551,7 +1551,8 @@ enum pattern_match_result path_matches_pattern_list( > > int init_sparse_checkout_patterns(struct index_state *istate) > { > - if (!core_apply_sparse_checkout) > + struct repo_config_values *cfg = repo_config_values(the_repository); > + if (!cfg->apply_sparse_checkout) > return 1; > if (istate->sparse_checkout_patterns) > return 0; > diff --git a/sparse-index.c b/sparse-index.c > index 76f90da5f5..cb4c99dcae 100644 > --- a/sparse-index.c > +++ b/sparse-index.c > @@ -152,7 +152,8 @@ static int index_has_unmerged_entries(struct index_state *istate) > > int is_sparse_index_allowed(struct index_state *istate, int flags) > { > - if (!core_apply_sparse_checkout || !core_sparse_checkout_cone) > + struct repo_config_values *cfg = repo_config_values(the_repository); > + if (!cfg->apply_sparse_checkout || !core_sparse_checkout_cone) > return 0; > > if (!(flags & SPARSE_INDEX_MEMORY_ONLY)) { > @@ -670,7 +671,8 @@ static void clear_skip_worktree_from_present_files_full(struct index_state *ista > > void clear_skip_worktree_from_present_files(struct index_state *istate) > { > - if (!core_apply_sparse_checkout || > + struct repo_config_values *cfg = repo_config_values(the_repository); > + if (!cfg->apply_sparse_checkout || > sparse_expect_files_outside_of_patterns) > return; >