]> git.ipfire.org Git - thirdparty/git.git/commitdiff
environment: move access to "core.sparsecheckout" into repo_settings
authorAyush Chandekar <ayu.chandekar@gmail.com>
Tue, 17 Jun 2025 12:06:34 +0000 (17:36 +0530)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Jun 2025 15:29:45 +0000 (08:29 -0700)
The setting "core.sparsecheckout" is stored in the global
`core_apply_sparse_checkout` and is populated in config.c. Refactor the
code to store it in the variable `sparse_checkout` in the struct
`repo_settings`.
It's fine not to lazily load it from the config, as the variable
is used quite commonly.

This also allows us to remove the definition `#define
USE_THE_REPOSITORY_VARIABLE` from the file 'builtin/backfill.c'.

This change is part of an ongoing effort to eliminate global variables,
improve modularity and help libify the codebase.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Ghanshyam Thakkar <shyamthakkar001@gmail.com>
Signed-off-by: Ayush Chandekar <ayu.chandekar@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 files changed:
builtin/backfill.c
builtin/clone.c
builtin/grep.c
builtin/mv.c
builtin/sparse-checkout.c
builtin/worktree.c
config.c
dir.c
environment.c
environment.h
repo-settings.c
repo-settings.h
sparse-index.c
unpack-trees.c
wt-status.c

index fa82ad2f6ff0b176474866cf2fcf787aa1df3e4a..bf9e56bff3b605d9900a2321b7c807767a378699 100644 (file)
@@ -1,6 +1,3 @@
-/* We need this macro to access core_apply_sparse_checkout */
-#define USE_THE_REPOSITORY_VARIABLE
-
 #include "builtin.h"
 #include "git-compat-util.h"
 #include "config.h"
@@ -137,9 +134,9 @@ int cmd_backfill(int argc, const char **argv, const char *prefix, struct reposit
                             0);
 
        repo_config(repo, git_default_config, NULL);
-
+       prepare_repo_settings(repo);
        if (ctx.sparse < 0)
-               ctx.sparse = core_apply_sparse_checkout;
+               ctx.sparse = repo->settings.sparse_checkout;
 
        result = do_backfill(&ctx);
        backfill_context_clear(&ctx);
index 91b9cd0d16419852bfe3e10dd99d68b92a2a37ec..1bc9c1badad896805ff8156adb053ad52c55d2fd 100644 (file)
@@ -621,7 +621,7 @@ static int git_sparse_checkout_init(const char *repo)
         * We must apply the setting in the current process
         * for the later checkout to use the sparse-checkout file.
         */
-       core_apply_sparse_checkout = 1;
+       the_repository->settings.sparse_checkout = 1;
 
        cmd.git_cmd = 1;
        if (run_command(&cmd)) {
index 3ce574a605b72dd77d8a200cea72c6fb05c9dd43..63342f5e36b63e3a2153b8f6b4871a3cd4315eaf 100644 (file)
@@ -481,7 +481,7 @@ static int grep_submodule(struct grep_opt *opt,
         *      "forget" the sparse-index feature switch. As a result, the index
         *      of these submodules are expanded unexpectedly.
         *
-        * 2. "core_apply_sparse_checkout"
+        * 2. "sparse_checkout"
         *      When running `grep` in the superproject, this setting is
         *      populated using the superproject's configs. However, once
         *      initialized, this config is globally accessible and is read by
index 07548fe96aeb49d15023134cc5ae36ea64bcd6c9..1e9f4d3eba1e21c4b75dc2f83653f93792210535 100644 (file)
@@ -572,7 +572,7 @@ remove_entry:
                rename_index_entry_at(the_repository->index, pos, dst);
 
                if (ignore_sparse &&
-                   core_apply_sparse_checkout &&
+                   the_repository->settings.sparse_checkout &&
                    core_sparse_checkout_cone) {
                        /*
                         * NEEDSWORK: we are *not* paying attention to
index 1bf01591b27523124a5894f8f777bb9ad740803a..869d574a03e27d3ae785738a1c9694763ebd32bc 100644 (file)
@@ -62,7 +62,7 @@ static int sparse_checkout_list(int argc, const char **argv, const char *prefix,
        int res;
 
        setup_work_tree();
-       if (!core_apply_sparse_checkout)
+       if (!the_repository->settings.sparse_checkout)
                die(_("this worktree is not sparse"));
 
        argc = parse_options(argc, argv, prefix,
@@ -397,11 +397,11 @@ static int set_config(enum sparse_checkout_mode mode)
 
 static enum sparse_checkout_mode update_cone_mode(int *cone_mode) {
        /* If not specified, use previous definition of cone mode */
-       if (*cone_mode == -1 && core_apply_sparse_checkout)
+       if (*cone_mode == -1 && the_repository->settings.sparse_checkout)
                *cone_mode = core_sparse_checkout_cone;
 
        /* Set cone/non-cone mode appropriately */
-       core_apply_sparse_checkout = 1;
+       the_repository->settings.sparse_checkout = 1;
        if (*cone_mode == 1 || *cone_mode == -1) {
                core_sparse_checkout_cone = 1;
                return MODE_CONE_PATTERNS;
@@ -415,7 +415,7 @@ static int update_modes(int *cone_mode, int *sparse_index)
        int mode, record_mode;
 
        /* Determine if we need to record the mode; ensure sparse checkout on */
-       record_mode = (*cone_mode != -1) || !core_apply_sparse_checkout;
+       record_mode = (*cone_mode != -1) || !the_repository->settings.sparse_checkout;
 
        mode = update_cone_mode(cone_mode);
        if (record_mode && set_config(mode))
@@ -695,9 +695,9 @@ static int modify_pattern_list(struct strvec *args, int use_stdin,
                break;
        }
 
-       if (!core_apply_sparse_checkout) {
+       if (!the_repository->settings.sparse_checkout) {
                set_config(MODE_ALL_PATTERNS);
-               core_apply_sparse_checkout = 1;
+               the_repository->settings.sparse_checkout = 1;
                changed_config = 1;
        }
 
@@ -793,7 +793,7 @@ static int sparse_checkout_add(int argc, const char **argv, const char *prefix,
        int ret;
 
        setup_work_tree();
-       if (!core_apply_sparse_checkout)
+       if (!the_repository->settings.sparse_checkout)
                die(_("no sparse-checkout to add to"));
 
        repo_read_index(the_repository);
@@ -902,7 +902,7 @@ static int sparse_checkout_reapply(int argc, const char **argv,
        };
 
        setup_work_tree();
-       if (!core_apply_sparse_checkout)
+       if (!the_repository->settings.sparse_checkout)
                die(_("must be in a sparse-checkout to reapply sparsity patterns"));
 
        reapply_opts.cone_mode = -1;
@@ -935,7 +935,7 @@ static int sparse_checkout_disable(int argc, const char **argv,
        struct pattern_list pl;
 
        /*
-        * We do not exit early if !core_apply_sparse_checkout; due to the
+        * We do not exit early if !sparse_checkout; due to the
         * ability for users to manually muck things up between
         *   direct editing of .git/info/sparse-checkout
         *   running read-tree -m u HEAD or update-index --skip-worktree
@@ -961,7 +961,7 @@ static int sparse_checkout_disable(int argc, const char **argv,
        hashmap_init(&pl.recursive_hashmap, pl_hashmap_cmp, NULL, 0);
        hashmap_init(&pl.parent_hashmap, pl_hashmap_cmp, NULL, 0);
        pl.use_cone_patterns = 0;
-       core_apply_sparse_checkout = 1;
+       the_repository->settings.sparse_checkout = 1;
 
        add_pattern("/*", empty_base, 0, &pl, 0);
 
index 88a36ea9f8674e4f3708e359835765cb799011fc..92e1c92afcd02150a5631cb6ab44d41e073f5d95 100644 (file)
@@ -536,7 +536,7 @@ static int add_worktree(const char *path, const char *refname,
         * If the current worktree has sparse-checkout enabled, then copy
         * the sparse-checkout patterns from the current worktree.
         */
-       if (core_apply_sparse_checkout)
+       if (the_repository->settings.sparse_checkout)
                copy_sparse_checkout(sb_repo.buf);
 
        /*
index b18b5617fcd05d146aec7b44edd50ff53523be39..8fd4dd8c81d06417180d10500d32d83cdccd94a3 100644 (file)
--- a/config.c
+++ b/config.c
@@ -1612,11 +1612,6 @@ static int git_default_core_config(const char *var, const char *value,
                return 0;
        }
 
-       if (!strcmp(var, "core.sparsecheckout")) {
-               core_apply_sparse_checkout = git_config_bool(var, value);
-               return 0;
-       }
-
        if (!strcmp(var, "core.sparsecheckoutcone")) {
                core_sparse_checkout_cone = git_config_bool(var, value);
                return 0;
diff --git a/dir.c b/dir.c
index a374972b6243b62da4db8e7d974d55549cdd98a7..8f0f7ca8a4a1f4256c6e42fdc7ff0c2496694375 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1503,7 +1503,7 @@ done:
 
 int init_sparse_checkout_patterns(struct index_state *istate)
 {
-       if (!core_apply_sparse_checkout)
+       if (!istate->repo->settings.sparse_checkout)
                return 1;
        if (istate->sparse_checkout_patterns)
                return 0;
index c61d773e7e8ff0dc1bc9b312dee0ca1f153e110d..a379a9149e4a9a0d371dc1cc50c87a4968cb0c15 100644 (file)
@@ -64,7 +64,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 core_apply_sparse_checkout;
 int core_sparse_checkout_cone;
 int sparse_expect_files_outside_of_patterns;
 int merge_log_config = -1;
index 3d98461a06f70228a9a1b160173291c04a0ba9b8..6a30512f3cf98a336b4db3d2085d44100381c4e2 100644 (file)
@@ -160,7 +160,6 @@ extern int precomposed_unicode;
 extern int protect_hfs;
 extern int protect_ntfs;
 
-extern int core_apply_sparse_checkout;
 extern int core_sparse_checkout_cone;
 extern int sparse_expect_files_outside_of_patterns;
 
index 4129f8fb2b43a33df5288772379437cfce2214ad..9270cca561ef6a76e1839f1fdfeb034d34d8ce82 100644 (file)
@@ -81,6 +81,7 @@ void prepare_repo_settings(struct repository *r)
                      &r->settings.pack_use_bitmap_boundary_traversal,
                      r->settings.pack_use_bitmap_boundary_traversal);
        repo_cfg_bool(r, "core.usereplacerefs", &r->settings.read_replace_refs, 1);
+       repo_cfg_bool(r, "core.sparsecheckout", &r->settings.sparse_checkout, 0);
 
        /*
         * The GIT_TEST_MULTI_PACK_INDEX variable is special in that
index 2bf24b259735c275331cea1b6a5d5e9ffc22e82a..9caa7c57a3924d9bb03e33142c3e17beece1fa10 100644 (file)
@@ -67,6 +67,7 @@ struct repo_settings {
        unsigned long big_file_threshold;
 
        char *hooks_path;
+       int sparse_checkout;
 };
 #define REPO_SETTINGS_INIT { \
        .shared_repository = -1, \
index 5634abafaa07ed77ad24d10457b7f1f3ec6108ec..2428b20634ca33fb7a997b6971476d1e42552fba 100644 (file)
@@ -150,7 +150,7 @@ 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)
+       if (!istate->repo->settings.sparse_checkout || !core_sparse_checkout_cone)
                return 0;
 
        if (!(flags & SPARSE_INDEX_MEMORY_ONLY)) {
@@ -668,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 (!core_apply_sparse_checkout ||
+       if (!istate->repo->settings.sparse_checkout ||
            sparse_expect_files_outside_of_patterns)
                return;
 
index 471837f0329d63a2fdacef1427874a5a59dd0415..02e32c4ba12ccd713d49df573ff5c6afea1665cf 100644 (file)
@@ -1924,7 +1924,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
        if (o->prefix)
                update_sparsity_for_prefix(o->prefix, o->src_index);
 
-       if (!core_apply_sparse_checkout || !o->update)
+       if (!repo->settings.sparse_checkout || !o->update)
                o->skip_sparse_checkout = 1;
        if (!o->skip_sparse_checkout) {
                memset(&pl, 0, sizeof(pl));
index 454601afa15a951adb6b70ae0687485a4448ed68..ec2be98194131977d059055db2f32573ecc44268 100644 (file)
@@ -1773,7 +1773,7 @@ static void wt_status_check_sparse_checkout(struct repository *r,
        int skip_worktree = 0;
        int i;
 
-       if (!core_apply_sparse_checkout || r->index->cache_nr == 0) {
+       if (!r->settings.sparse_checkout || r->index->cache_nr == 0) {
                /*
                 * Don't compute percentage of checked out files if we
                 * aren't in a sparse checkout or would get division by 0.