Browse Source
The cache-tree optimization originally helped speed up write-tree operation. However, many commands no longer properly maintain -- or use an opportunity to cheaply generate -- the cache-tree data. In particular, this affects commit, checkout and reset. The notable examples that *do* write cache-tree data are read-tree and write-tree. This sadly means most people no longer benefit from the optimization, as they would not normally use the plumbing commands. Document the current state of affairs in a test file, in preparation for improvements in the area. Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint


1 changed files with 95 additions and 0 deletions
@ -0,0 +1,95 @@
@@ -0,0 +1,95 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description="Test whether cache-tree is properly updated |
||||
|
||||
Tests whether various commands properly update and/or rewrite the |
||||
cache-tree extension. |
||||
" |
||||
. ./test-lib.sh |
||||
|
||||
cmp_cache_tree () { |
||||
test-dump-cache-tree >actual && |
||||
sed "s/$_x40/SHA/" <actual >filtered && |
||||
test_cmp "$1" filtered |
||||
} |
||||
|
||||
# We don't bother with actually checking the SHA1: |
||||
# test-dump-cache-tree already verifies that all existing data is |
||||
# correct. |
||||
test_shallow_cache_tree () { |
||||
echo "SHA " \ |
||||
"($(git ls-files|wc -l) entries, 0 subtrees)" >expect && |
||||
cmp_cache_tree expect |
||||
} |
||||
|
||||
test_invalid_cache_tree () { |
||||
echo "invalid (0 subtrees)" >expect && |
||||
echo "SHA #(ref) " \ |
||||
"($(git ls-files|wc -l) entries, 0 subtrees)" >>expect && |
||||
cmp_cache_tree expect |
||||
} |
||||
|
||||
test_no_cache_tree () { |
||||
: >expect && |
||||
cmp_cache_tree expect |
||||
} |
||||
|
||||
test_expect_failure 'initial commit has cache-tree' ' |
||||
test_commit foo && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_expect_success 'read-tree HEAD establishes cache-tree' ' |
||||
git read-tree HEAD && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_expect_success 'git-add invalidates cache-tree' ' |
||||
test_when_finished "git reset --hard; git read-tree HEAD" && |
||||
echo "I changed this file" > foo && |
||||
git add foo && |
||||
test_invalid_cache_tree |
||||
' |
||||
|
||||
test_expect_success 'update-index invalidates cache-tree' ' |
||||
test_when_finished "git reset --hard; git read-tree HEAD" && |
||||
echo "I changed this file" > foo && |
||||
git update-index --add foo && |
||||
test_invalid_cache_tree |
||||
' |
||||
|
||||
test_expect_success 'write-tree establishes cache-tree' ' |
||||
test-scrap-cache-tree && |
||||
git write-tree && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_expect_success 'test-scrap-cache-tree works' ' |
||||
git read-tree HEAD && |
||||
test-scrap-cache-tree && |
||||
test_no_cache_tree |
||||
' |
||||
|
||||
test_expect_failure 'second commit has cache-tree' ' |
||||
test_commit bar && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_expect_failure 'reset --hard gives cache-tree' ' |
||||
test-scrap-cache-tree && |
||||
git reset --hard && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_expect_failure 'reset --hard without index gives cache-tree' ' |
||||
rm -f .git/index && |
||||
git reset --hard && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_expect_failure 'checkout gives cache-tree' ' |
||||
git checkout HEAD^ && |
||||
test_shallow_cache_tree |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue