]> git.ipfire.org Git - thirdparty/git.git/commit
read-tree: use 'skip_cache_tree_update' option
authorVictoria Dye <vdye@github.com>
Thu, 10 Nov 2022 19:06:04 +0000 (19:06 +0000)
committerTaylor Blau <me@ttaylorr.com>
Fri, 11 Nov 2022 02:49:34 +0000 (21:49 -0500)
commitdc5d40f5bc4d93dcc57ee82c5ca8d1369055d8cb
treedaf9d6037bb90db545bee2e8c473d7241e6bf4d5
parent0e47bca0f7592f8053ffcc530d8afa1d2e364563
read-tree: use 'skip_cache_tree_update' option

When running 'read-tree' with a single tree and no prefix,
'prime_cache_tree()' is called after the tree is unpacked. In that
situation, skip a redundant call to 'cache_tree_update()' in
'unpack_trees()' by enabling the 'skip_cache_tree_update' unpack option.

Removing the redundant cache tree update provides a substantial performance
improvement to 'git read-tree <tree-ish>', as shown by a test added to
'p0006-read-tree-checkout.sh':

Test                          before            after
----------------------------------------------------------------------
read-tree br_ballast_plus_1   3.94(1.80+1.57)   3.00(1.14+1.28) -23.9%

Note that the 'read-tree' in 't1022-read-tree-partial-clone.sh' is updated
to read two trees, rather than one. The test was first introduced in
d3da223f221 (cache-tree: prefetch in partial clone read-tree, 2021-07-23) to
exercise the 'cache_tree_update()' code path, as used in 'git merge'. Since
this patch drops the call to 'cache_tree_update()' in single-tree 'git
read-tree', change the test to use the two-tree variant so that
'cache_tree_update()' is called as intended.

Signed-off-by: Victoria Dye <vdye@github.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
builtin/read-tree.c
t/perf/p0006-read-tree-checkout.sh
t/t1022-read-tree-partial-clone.sh