• Junio C Hamano's avatar
    Avoid running lstat(2) on the same cache entry. · eadb5831
    Junio C Hamano authored
    Aside from the lstat(2) done for work tree files, there are
    quite many lstat(2) calls in refname dwimming codepath.  This
    patch is not about reducing them.
     * It adds a new ce_flag, CE_UPTODATE, that is meant to mark the
       cache entries that record a regular file blob that is up to
       date in the work tree.  If somebody later walks the index and
       wants to see if the work tree has changes, they do not have
       to be checked with lstat(2) again.
     * fill_stat_cache_info() marks the cache entry it just added
       with CE_UPTODATE.  This has the effect of marking the paths
       we write out of the index and lstat(2) immediately as "no
       need to lstat -- we know it is up-to-date", from quite a lot
       fo callers:
        - git-apply --index
        - git-update-index
        - git-checkout-index
        - git-add (uses add_file_to_index())
        - git-commit (ditto)
        - git-mv (ditto)
     * refresh_cache_ent() also marks the cache entry that are clean
       with CE_UPTODATE.
     * write_index is changed not to write CE_UPTODATE out to the
       index file, because CE_UPTODATE is meant to be transient only
       in core.  For the same reason, CE_UPDATE is not written to
       prevent an accident from happening.
    Signed-off-by: default avatarJunio C Hamano <[email protected]>
    Signed-off-by: default avatarLinus Torvalds <[email protected]>
read-cache.c 31.3 KB