summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2018-03-08 12:36:30 -0800
committerJunio C Hamano <gitster@pobox.com>2018-03-08 12:36:30 -0800
commitcdda65acae0b05a197c9f6684d517a5c4325c08f (patch)
treeba63e5f6b303dea133610ef3ddb0199e099fdfc8
parent74735c9ca7f1026eb62346510c5bb2aad7f78e04 (diff)
parent026336cb277693c5a8cdfa4705a26daf0a754328 (diff)
downloadgit-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
-rw-r--r--dir.c15
-rwxr-xr-xt/t7063-status-untracked-cache.sh3
2 files changed, 16 insertions, 2 deletions
diff --git a/dir.c b/dir.c
index 6dd91be818..dedbf5d476 100644
--- a/dir.c
+++ b/dir.c
@@ -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))
diff --git a/t/t7063-status-untracked-cache.sh b/t/t7063-status-untracked-cache.sh
index 46b947824f..c61e304e97 100755
--- a/t/t7063-status-untracked-cache.sh
+++ b/t/t7063-status-untracked-cache.sh
@@ -14,6 +14,9 @@ test_description='test untracked cache'
# See <20160803174522.5571-1-pclouds@gmail.com> if you want to know
# more.
+GIT_FORCE_UNTRACKED_CACHE=true
+export GIT_FORCE_UNTRACKED_CACHE
+
sync_mtime () {
find . -type d -ls >/dev/null
}