update-index/diff-index: use core.preloadindex to improve performance
authorKarsten Blees <blees@dcon.de>
Tue, 30 Oct 2012 09:50:42 +0000 (10:50 +0100)
committerJeff King <peff@peff.net>
Fri, 2 Nov 2012 15:38:29 +0000 (11:38 -0400)
commit7349afd20e3b0ce3da6f192f593390472acec9d3
treeef4d2b60cb0cad38f4f6f68640a55b26105790da
parent7e2010537e96d0a1144520222f20ba1dc3d61441
update-index/diff-index: use core.preloadindex to improve performance

'update-index --refresh' and 'diff-index' (without --cached) don't honor
the core.preloadindex setting yet. Porcelain commands using these (such as
git [svn] rebase) suffer from this, especially on Windows.

Use read_cache_preload to improve performance.

Additionally, in builtin/diff.c, don't preload index status if we don't
access the working copy (--cached).

Results with msysgit on WebKit repo (2GB in 200k files):

                | update-index | diff-index | rebase
----------------+--------------+------------+---------
msysgit-v1.8.0  |       9.157s |    10.536s | 42.791s
+ preloadindex  |       9.157s |    10.536s | 28.725s
+ this patch    |       2.329s |     2.752s | 15.152s
+ fscache [1]   |       0.731s |     1.171s |  8.877s

[1] https://github.com/kblees/git/tree/kb/fscache-v3

Thanks-to: Albert Krawczyk <pro-logic@optusnet.com.au>
Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Jeff King <peff@peff.net>
builtin/diff-index.c
builtin/diff.c
builtin/update-index.c