@matheusbsbs / matheus-bagliano / commits / 53996fe539
Fork 0

Teach 'git checkout' to preload the index contents

This makes git checkout know to use the threaded index preloading if it is enabled in the config file. You need to have [core] preloadindex = true in your config file to see it, and for that feature to make sense your filesystem needs to be able to do concurrent 'lstat()' lookups, but when that is the case (especially NFS over a high-latency network), this can be a noticeable performance win. But with a low-latency network and at least older Linux NFS clients, this will clearly potentially cause a lot of lock contention. It may still speed up the uncached case, but the threading and locking overhead will result in the cached case likely slowing down. That was almost certainly fixed by Linux commit fc0f684c2 ("NFS: Remove BKL from NFS lookup code"), but that one got merged into 2.6.27-rc1, so older kernel versions than 2.6.27 will not scale very well. But regardless, it's the right thing to do. If your filesystem doesn't scale, don't enable index preloading. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Linus Torvalds committed May 9, 2009 at 15:11 UTC 53996fe5397ff37c5934bb5e9b23ef5985b3d152
1 file changed +2 -2
builtin-checkout.c
+2 -2
@@ -228,7 +228,7 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec,
228 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
229
230 newfd = hold_locked_index(lock_file, 1);
231 - if (read_cache() < 0)
231 + if (read_cache_preload(pathspec) < 0)
232 return error("corrupt index file");
233
234 if (source_tree)
@@ -373,7 +373,7 @@ static int merge_working_tree(struct checkout_opts *opts,
373 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
374 int newfd = hold_locked_index(lock_file, 1);
375
376 - if (read_cache() < 0)
376 + if (read_cache_preload(NULL) < 0)
377 return error("corrupt index file");
378
379 if (opts->force) {