git/t/t7009-filter-branch-null-sha1.sh
Jeff King 99094a7ad4 t: fix trivial &&-chain breakage
These are tests which are missing a link in their &&-chain,
but during a setup phase. We may fail to notice failure in
commands that build the test environment, but these are
typically not expected to fail at all (but it's still good
to double-check that our test environment is what we
expect).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-03-20 10:20:14 -07:00

50 lines
1.3 KiB
Bash
Executable file

#!/bin/sh
test_description='filter-branch removal of trees with null sha1'
. ./test-lib.sh
test_expect_success 'setup: base commits' '
test_commit one &&
test_commit two &&
test_commit three
'
test_expect_success 'setup: a commit with a bogus null sha1 in the tree' '
{
git ls-tree HEAD &&
printf "160000 commit $_z40\\tbroken\\n"
} >broken-tree &&
echo "add broken entry" >msg &&
tree=$(git mktree <broken-tree) &&
test_tick &&
commit=$(git commit-tree $tree -p HEAD <msg) &&
git update-ref HEAD "$commit"
'
# we have to make one more commit on top removing the broken
# entry, since otherwise our index does not match HEAD (and filter-branch will
# complain). We could make the index match HEAD, but doing so would involve
# writing a null sha1 into the index.
test_expect_success 'setup: bring HEAD and index in sync' '
test_tick &&
git commit -a -m "back to normal"
'
test_expect_success 'filter commands are still checked' '
test_must_fail git filter-branch \
--force --prune-empty \
--index-filter "git rm --cached --ignore-unmatch three.t"
'
test_expect_success 'removing the broken entry works' '
echo three >expect &&
git filter-branch \
--force --prune-empty \
--index-filter "git rm --cached --ignore-unmatch broken" &&
git log -1 --format=%s >actual &&
test_cmp expect actual
'
test_done