diff --git a/builtin/update-index.c b/builtin/update-index.c
index 018b78d6bb..65e9858457 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -431,7 +431,7 @@ static int add_cacheinfo(unsigned int mode, const struct object_id *oid,
ce->ce_flags = create_ce_flags(stage);
ce->ce_namelen = len;
ce->ce_mode = create_ce_mode(mode);
- if (assume_unchanged)
+ if (repo_assume_unchanged(the_repository))
ce->ce_flags |= CE_VALID;
option = allow_add ? ADD_CACHE_OK_TO_ADD : 0;
option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0;
diff --git a/environment.c b/environment.c
index c83cf44839..17398c36d0 100644
--- a/environment.c
+++ b/environment.c
@@ -42,7 +42,6 @@ static int pack_compression_seen;
static int zlib_compression_seen;
int minimum_abbrev = 4, default_abbrev = -1;
-int assume_unchanged;
char *git_commit_encoding;
char *git_log_output_encoding;
int fsync_object_files = -1;
@@ -152,6 +151,13 @@ int repo_has_symlinks(struct repository *repo)
: platform_has_symlinks();
}
+int repo_assume_unchanged(struct repository *repo)
+{
+ return repo->initialized
+ ? repo_config_values(repo)->assume_unchanged
+ : 0;
+}
+
const char *repo_excludes_file(struct repository *repo)
{
struct repo_config_values *cfg = repo_config_values(repo);@@ -371,7 +377,7 @@ int git_default_core_config(const char *var, const char *value,
}
if (!strcmp(var, "core.ignorestat")) {
- assume_unchanged = git_config_bool(var, value);
+ cfg->assume_unchanged = git_config_bool(var, value);
return 0;
}
@@ -775,6 +781,7 @@ void repo_config_values_init(struct repo_config_values *cfg)
cfg->protect_ntfs = PROTECT_NTFS_DEFAULT;
cfg->ignore_case = 0;
cfg->trust_executable_bit = 1;
+ cfg->assume_unchanged = 0;
cfg->has_symlinks = platform_has_symlinks();
cfg->use_nanosec = 0;
diff --git a/environment.h b/environment.h
index 49c86e8879..bff7a7f911 100644
--- a/environment.h
+++ b/environment.h
@@ -147,6 +147,7 @@ struct repo_config_values {
int protect_ntfs;
int ignore_case;
int trust_executable_bit;
+ int assume_unchanged;
int has_symlinks;
int use_nanosec;
@@ -200,6 +201,7 @@ int repo_protect_ntfs(struct repository *repo);
int repo_ignore_case(struct repository *repo);
int repo_trust_executable_bit(struct repository *repo);
+int repo_assume_unchanged(struct repository *repo);
int repo_has_symlinks(struct repository *repo);
@@ -242,7 +244,6 @@ int have_git_dir(void);
/* Environment bits from configuration mechanism */
extern int minimum_abbrev, default_abbrev;
-extern int assume_unchanged;
extern unsigned long pack_size_limit_cfg;
extern int grafts_keep_true_parents;
diff --git a/read-cache.c b/read-cache.c
index 1d2b97c429..990bcc32c4 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -194,7 +194,7 @@ void fill_stat_cache_info(struct index_state *istate, struct cache_entry *ce, st
{
fill_stat_data(&ce->ce_stat_data, st);
- if (assume_unchanged)
+ if (repo_assume_unchanged(istate->repo))
ce->ce_flags |= CE_VALID;
if (S_ISREG(st->st_mode)) {@@ -1415,7 +1415,7 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
* is not marked VALID, this is the place to mark it
* valid again, under "assume unchanged" mode.
*/
- if (ignore_valid && assume_unchanged &&
+ if (ignore_valid && repo_assume_unchanged(istate->repo) &&
!(ce->ce_flags & CE_VALID))
; /* mark this one VALID again */
else {@@ -1450,7 +1450,7 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
* (i.e. things to be edited) will reacquire CE_VALID bit
* automatically, which is not really what we want.
*/
- if (!ignore_valid && assume_unchanged &&
+ if (!ignore_valid && repo_assume_unchanged(istate->repo) &&
!(ce->ce_flags & CE_VALID))
updated->ce_flags &= ~CE_VALID;
--
2.53.0