Currently inside write_entry() we do an lstat(path, &st) call on a file which have just been opened inside the exact same function. It should be better to call fstat(fd, &st) on the file while it is opened, and it should be at least as fast as the lstat() method. Signed-off-by: Kjetil Barvik <barvik@xxxxxxxxxxxx> --- entry.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/entry.c b/entry.c index 8543755..c932ae8 100644 --- a/entry.c +++ b/entry.c @@ -96,11 +96,12 @@ write_entry(struct cache_entry *ce, char *path, const struct checkout *state, int to_tempfile) { unsigned int ce_mode_s_ifmt = ce->ce_mode & S_IFMT; - int fd, ret; + int fd, ret, fstat_done = 0; char *new; struct strbuf buf = STRBUF_INIT; unsigned long size; size_t wrote, newsize = 0; + struct stat st; switch (ce_mode_s_ifmt) { case S_IFREG: @@ -151,6 +152,10 @@ write_entry(struct cache_entry *ce, char *path, const struct checkout *state, } wrote = write_in_full(fd, new, size); + if (state->refresh_cache) { + fstat(fd, &st); + fstat_done = 1; + } close(fd); free(new); if (wrote != size) @@ -174,8 +179,8 @@ write_entry(struct cache_entry *ce, char *path, const struct checkout *state, } if (state->refresh_cache) { - struct stat st; - lstat(ce->name, &st); + if (!fstat_done) + lstat(ce->name, &st); fill_stat_cache_info(ce, &st); } return 0; -- 1.6.1.349.g99fa5 -- 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