checkout.c: enable fscache for checkout_entry

This is to speed up git checkout for directory in very large repositories.

Taking file stats while directory traversing is faster than
stating to each files on windows.

`git checkout .` in master branch of chromium repositry, having 284659 files,
takes more than 18 seconds.
This patch improved the time to around 4 seconds on my SSD laptop.

Signed-off-by: Takuto Ikuta <tikuta@chromium.org>
This commit is contained in:
Takuto Ikuta
2018-01-03 13:22:52 +09:00
committed by Johannes Schindelin
parent 98117e33f6
commit 397c27b3d8

View File

@@ -359,6 +359,7 @@ static int checkout_paths(const struct checkout_opts *opts,
state.istate = &the_index;
enable_delayed_checkout(&state);
enable_fscache(1);
for (pos = 0; pos < active_nr; pos++) {
struct cache_entry *ce = active_cache[pos];
if (ce->ce_flags & CE_MATCHED) {
@@ -373,6 +374,7 @@ static int checkout_paths(const struct checkout_opts *opts,
pos = skip_same_name(ce, pos) - 1;
}
}
enable_fscache(0);
errs |= finish_delayed_checkout(&state);
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))