Git fork
at reftables-rust 56 lines 1.5 kB view raw
1#!/bin/sh 2 3test_description='filter-branch removal of trees with null sha1' 4 5. ./test-lib.sh 6 7test_expect_success 'setup: base commits' ' 8 test_commit one && 9 test_commit two && 10 test_commit three 11' 12 13test_expect_success 'setup: a commit with a bogus null sha1 in the tree' ' 14 { 15 git ls-tree HEAD && 16 printf "160000 commit $ZERO_OID\\tbroken\\n" 17 } >broken-tree && 18 echo "add broken entry" >msg && 19 20 tree=$(git mktree <broken-tree) && 21 test_tick && 22 commit=$(git commit-tree $tree -p HEAD <msg) && 23 git update-ref HEAD "$commit" 24' 25 26# we have to make one more commit on top removing the broken 27# entry, since otherwise our index does not match HEAD (and filter-branch will 28# complain). We could make the index match HEAD, but doing so would involve 29# writing a null sha1 into the index. 30test_expect_success 'setup: bring HEAD and index in sync' ' 31 test_tick && 32 git commit -a -m "back to normal" 33' 34 35test_expect_success 'noop filter-branch complains' ' 36 test_must_fail git filter-branch \ 37 --force --prune-empty \ 38 --index-filter "true" 39' 40 41test_expect_success 'filter commands are still checked' ' 42 test_must_fail git filter-branch \ 43 --force --prune-empty \ 44 --index-filter "git rm --cached --ignore-unmatch three.t" 45' 46 47test_expect_success 'removing the broken entry works' ' 48 echo three >expect && 49 git filter-branch \ 50 --force --prune-empty \ 51 --index-filter "git rm --cached --ignore-unmatch broken" && 52 git log -1 --format=%s >actual && 53 test_cmp expect actual 54' 55 56test_done