-/* 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"
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);
* 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)) {
* "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
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
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,
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;
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))
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;
}
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);
};
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;
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
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);
* 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);
/*
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;
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;
#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;
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;
&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
unsigned long big_file_threshold;
char *hooks_path;
+ int sparse_checkout;
};
#define REPO_SETTINGS_INIT { \
.shared_repository = -1, \
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)) {
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;
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));
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.