Traditional "opportunistic index update" done by read-only "diff" and "status" was about updating cached lstat(2) information in the index for the next round. We missed another obvious optimization opportunity to when there are racily clean entries that will ceas to be racily clean by updating $GIT_INDEX_FILE. Noticed by Lasse Makholm by stracing "git status" in a fresh checkout and counting the number of open(2) calls. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- read-cache.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/read-cache.c b/read-cache.c index 561dc66..971e277 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1545,12 +1545,25 @@ static int ce_write_entry(git_SHA_CTX *c, int fd, struct cache_entry *ce) return result; } +static int has_racy_timestamp(struct index_state *istate) +{ + int entries = istate->cache_nr; + int i; + + for (i = 0; i < entries; i++) { + struct cache_entry *ce = istate->cache[i]; + if (is_racy_timestamp(istate, ce)) + return 1; + } + return 0; +} + /* * Opportunisticly update the index but do not complain if we can't */ void update_index_if_able(struct index_state *istate, struct lock_file *lockfile) { - if (istate->cache_changed) && + if ((istate->cache_changed || has_racy_timestamp(istate)) && !write_index(istate, lockfile->fd)) commit_locked_index(lockfile); else -- 1.7.4.1.554.gfdad8 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html