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