[GSOC PATCH v6 3/3] environment: remove the global variable 'sparse_expect_files_outside_of_patterns'
From: Ayush Chandekar <hidden>
Date: 2025-07-19 00:12:09
Subsystem:
the rest · Maintainer:
Linus Torvalds
The setting "sparse.expectFilesOutsideOfPatterns" is stored in the global variable 'sparse_expect_files_outside_of_patterns' and allows files marked with the `SKIP_WORKTREE` bit to be present in the worktree. As this setting is closely related to repository, remove the global variable and store the setting in the `struct repo_settings` along with other sparse checkout related settings. This also allows us to remove the definition '#define USE_THE_REPOSITORY_VARIABLE' from the file 'sparse-index.c'. This change is part of an ongoing effort to eliminate global variables, improve modularity and help libify the codebase. Mentored-by: Christian Couder [off-list ref] Mentored-by: Ghanshyam Thakkar [off-list ref] Signed-off-by: Ayush Chandekar <redacted> --- config.c | 14 -------------- environment.c | 1 - environment.h | 2 -- repo-settings.c | 1 + repo-settings.h | 1 + sparse-index.c | 3 +-- 6 files changed, 3 insertions(+), 19 deletions(-)
diff --git a/config.c b/config.c
index e13f7d8fe8..ea6de843f7 100644
--- a/config.c
+++ b/config.c@@ -1631,17 +1631,6 @@ static int git_default_core_config(const char *var, const char *value, return platform_core_config(var, value, ctx, cb); } -static int git_default_sparse_config(const char *var, const char *value) -{ - if (!strcmp(var, "sparse.expectfilesoutsideofpatterns")) { - sparse_expect_files_outside_of_patterns = git_config_bool(var, value); - return 0; - } - - /* Add other config variables here and to Documentation/config/sparse.adoc. */ - return 0; -} - static int git_default_i18n_config(const char *var, const char *value) { if (!strcmp(var, "i18n.commitencoding")) {
@@ -1803,9 +1792,6 @@ int git_default_config(const char *var, const char *value, return 0; } - if (starts_with(var, "sparse.")) - return git_default_sparse_config(var, value); - /* Add other config variables here and to Documentation/config.adoc. */ return 0; }
diff --git a/environment.c b/environment.c
index cd5ec5c736..cf52fa9617 100644
--- a/environment.c
+++ b/environment.c@@ -63,7 +63,6 @@ enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED; #endif enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE; int grafts_keep_true_parents; -int sparse_expect_files_outside_of_patterns; int merge_log_config = -1; int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */ unsigned long pack_size_limit_cfg;
diff --git a/environment.h b/environment.h
index 5642156d3d..aaa3025df3 100644
--- a/environment.h
+++ b/environment.h@@ -159,8 +159,6 @@ extern int precomposed_unicode; extern int protect_hfs; extern int protect_ntfs; -extern int sparse_expect_files_outside_of_patterns; - enum rebase_setup_type { AUTOREBASE_NEVER = 0, AUTOREBASE_LOCAL,
diff --git a/repo-settings.c b/repo-settings.c
index 505e402276..5e0ba4ae23 100644
--- a/repo-settings.c
+++ b/repo-settings.c@@ -86,6 +86,7 @@ void prepare_repo_settings(struct repository *r) repo_cfg_bool(r, "core.usereplacerefs", &r->settings.read_replace_refs, 1); repo_cfg_bool(r, "core.sparsecheckout", &r->settings.sparse_checkout, 0); repo_cfg_bool(r, "core.sparsecheckoutcone", &r->settings.sparse_checkout_cone, 0); + repo_cfg_bool(r, "sparse.expectfilesoutsideofpatterns", &r->settings.sparse_expect_files_outside_of_patterns, 0); /* * The GIT_TEST_MULTI_PACK_INDEX variable is special in that
diff --git a/repo-settings.h b/repo-settings.h
index 1b43c4029c..695c0fd0ce 100644
--- a/repo-settings.h
+++ b/repo-settings.h@@ -71,6 +71,7 @@ struct repo_settings { int sparse_checkout; int sparse_checkout_cone; + int sparse_expect_files_outside_of_patterns; }; #define REPO_SETTINGS_INIT { \ .shared_repository = -1, \
diff --git a/sparse-index.c b/sparse-index.c
index 3b51ea46e3..552d26adc1 100644
--- a/sparse-index.c
+++ b/sparse-index.c@@ -1,4 +1,3 @@ -#define USE_THE_REPOSITORY_VARIABLE #define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h"
@@ -669,7 +668,7 @@ 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 (!istate->repo->settings.sparse_checkout || - sparse_expect_files_outside_of_patterns) + istate->repo->settings.sparse_expect_files_outside_of_patterns) return; if (clear_skip_worktree_from_present_files_sparse(istate)) {
--
2.49.0