diff options
author | Junio C Hamano <gitster@pobox.com> | 2018-03-08 12:36:30 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-03-08 12:36:30 -0800 |
commit | cdda65acae0b05a197c9f6684d517a5c4325c08f (patch) | |
tree | ba63e5f6b303dea133610ef3ddb0199e099fdfc8 /dir.c | |
parent | 74735c9ca7f1026eb62346510c5bb2aad7f78e04 (diff) | |
parent | 026336cb277693c5a8cdfa4705a26daf0a754328 (diff) | |
download | git-cdda65acae0b05a197c9f6684d517a5c4325c08f.tar.gz |
Merge branch 'bp/untracked-cache-noflush'
Writing out the index file when the only thing that changed in it
is the untracked cache information is often wasteful, and this has
been optimized out.
* bp/untracked-cache-noflush:
untracked cache: use git_env_bool() not getenv() for customization
dir.c: don't flag the index as dirty for changes to the untracked cache
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 15 |
1 files changed, 13 insertions, 2 deletions
@@ -2172,8 +2172,13 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d const struct pathspec *pathspec) { struct untracked_cache_dir *root; + static int untracked_cache_disabled = -1; - if (!dir->untracked || getenv("GIT_DISABLE_UNTRACKED_CACHE")) + if (!dir->untracked) + return NULL; + if (untracked_cache_disabled < 0) + untracked_cache_disabled = git_env_bool("GIT_DISABLE_UNTRACKED_CACHE", 0); + if (untracked_cache_disabled) return NULL; /* @@ -2297,7 +2302,12 @@ int read_directory(struct dir_struct *dir, struct index_state *istate, trace_performance_since(start, "read directory %.*s", len, path); if (dir->untracked) { + static int force_untracked_cache = -1; static struct trace_key trace_untracked_stats = TRACE_KEY_INIT(UNTRACKED_STATS); + + if (force_untracked_cache < 0) + force_untracked_cache = + git_env_bool("GIT_FORCE_UNTRACKED_CACHE", 0); trace_printf_key(&trace_untracked_stats, "node creation: %u\n" "gitignore invalidation: %u\n" @@ -2307,7 +2317,8 @@ int read_directory(struct dir_struct *dir, struct index_state *istate, dir->untracked->gitignore_invalidated, dir->untracked->dir_invalidated, dir->untracked->dir_opened); - if (dir->untracked == istate->untracked && + if (force_untracked_cache && + dir->untracked == istate->untracked && (dir->untracked->dir_opened || dir->untracked->gitignore_invalidated || dir->untracked->dir_invalidated)) |