You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.4 KiB
55 lines
1.4 KiB
#!/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 $ZERO_OID\\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 'noop filter-branch complains' ' |
|
test_must_fail git filter-branch \ |
|
--force --prune-empty \ |
|
--index-filter "true" |
|
' |
|
|
|
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
|
|
|