From: Jeff Hostetler <jeffh...@microsoft.com> Teach preload-index to avoid lstat() calls for index-entries with skip-worktree bit set. This is a performance optimization.
During a sparse-checkout, the skip-worktree bit is set on items that were not populated and therefore are not present in the worktree. The per-thread preload-index loop performs a series of tests on each index-entry as it attempts to compare the worktree version with the index and mark them up-to-date. This patch short-cuts that work. On a Windows 10 system with a very large repo (450MB index) and various levels of sparseness, performance was improved in the {preloadindex=true, fscache=false} case by 80% and in the {preloadindex=true, fscache=true} case by 20% for various commands. Signed-off-by: Jeff Hostetler <jeffh...@microsoft.com> Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de> --- Published-As: https://github.com/dscho/git/releases/tag/preload-index-sparse-v1 Fetch-It-Via: git fetch https://github.com/dscho/git preload-index-sparse-v1 preload-index.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/preload-index.c b/preload-index.c index c1fe3a3ef9c..70a4c808783 100644 --- a/preload-index.c +++ b/preload-index.c @@ -53,6 +53,8 @@ static void *preload_thread(void *_data) continue; if (ce_uptodate(ce)) continue; + if (ce_skip_worktree(ce)) + continue; if (!ce_path_match(ce, &p->pathspec, NULL)) continue; if (threaded_has_symlink_leading_path(&cache, ce->name, ce_namelen(ce))) base-commit: 6e3a7b3398559305c7a239a42e447c21a8f39ff8 -- 2.11.1.windows.1