Skip to content

Commit 8f8e1af

Browse files
benpeartGit for Windows Build Agent
authored andcommitted
Enable the filesystem cache (fscache) in refresh_index().
On file systems that support it, this can dramatically speed up operations like add, commit, describe, rebase, reset, rm that would otherwise have to lstat() every file to "re-match" the stat information in the index to that of the file system. On a synthetic repo with 1M files, "git reset" dropped from 52.02 seconds to 14.42 seconds for a savings of 72%. Signed-off-by: Ben Peart <[email protected]>
1 parent 60bd615 commit 8f8e1af

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

read-cache.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,6 +1504,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,
15041504
typechange_fmt = in_porcelain ? "T\t%s\n" : "%s: needs update\n";
15051505
added_fmt = in_porcelain ? "A\t%s\n" : "%s: needs update\n";
15061506
unmerged_fmt = in_porcelain ? "U\t%s\n" : "%s: needs merge\n";
1507+
enable_fscache(1);
15071508
/*
15081509
* Use the multi-threaded preload_index() to refresh most of the
15091510
* cache entries quickly then in the single threaded loop below,
@@ -1598,6 +1599,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,
15981599
display_progress(progress, istate->cache_nr);
15991600
stop_progress(&progress);
16001601
trace_performance_leave("refresh index");
1602+
enable_fscache(0);
16011603
return has_errors;
16021604
}
16031605

0 commit comments

Comments
 (0)