#!/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 () { printf "SHA (%d entries, 0 subtrees)\n" $(git ls-files|wc -l) >expect && cmp_cache_tree expect } test_invalid_cache_tree () { echo "invalid (0 subtrees)" >expect && printf "SHA #(ref) (%d entries, 0 subtrees)\n" $(git ls-files|wc -l) >>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_success 'second commit has cache-tree' ' test_commit bar && test_shallow_cache_tree ' test_expect_success 'reset --hard gives cache-tree' ' test-scrap-cache-tree && git reset --hard && test_shallow_cache_tree ' test_expect_success '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