write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
authorJunio C Hamano <gitster@pobox.com>
Sun, 30 Mar 2008 16:25:52 +0000 (09:25 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 13 Apr 2008 02:42:17 +0000 (19:42 -0700)
When writing the index out, we need to check the work tree again to see if
an entry whose timestamp indicates that it could be "racily clean", in
order to smudge it if it is stat-clean but with modified contents.

However, we can skip this step for entries marked with CE_UPTODATE,
which are known to be the really clean (i.e. the one we already have
checked when we prepared the index).  This will reduce lstat(2) calls
necessary in git-status.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
read-cache.c

index a92b25b59bf0e096942bca126542a1ea411b525b..c3692f41adc6a8c65e9ae9e4c82910ea4a63d599 100644 (file)
@@ -1370,7 +1370,7 @@ int write_index(const struct index_state *istate, int newfd)
                struct cache_entry *ce = cache[i];
                if (ce->ce_flags & CE_REMOVE)
                        continue;
-               if (is_racy_timestamp(istate, ce))
+               if (!ce_uptodate(ce) && is_racy_timestamp(istate, ce))
                        ce_smudge_racily_clean_entry(ce);
                if (ce_write_entry(&c, newfd, ce) < 0)
                        return -1;