From 804d3edc80602a2a3fb295097718a5ede6f69cc5 Mon Sep 17 00:00:00 2001 From: Takuto Ikuta Date: Wed, 3 Jan 2018 13:22:52 +0900 Subject: [PATCH] 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 --- builtin/checkout.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/builtin/checkout.c b/builtin/checkout.c index 8bdc927d3f..9558e25e59 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -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))