]>
Commit | Line | Data |
---|---|---|
83bd7437 JK |
1 | #!/bin/sh |
2 | ||
3 | test_description='filter-branch removal of trees with null sha1' | |
4 | . ./test-lib.sh | |
5 | ||
6 | test_expect_success 'setup: base commits' ' | |
7 | test_commit one && | |
8 | test_commit two && | |
9 | test_commit three | |
10 | ' | |
11 | ||
12 | test_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. | |
29 | test_expect_success 'setup: bring HEAD and index in sync' ' | |
30 | test_tick && | |
31 | git commit -a -m "back to normal" | |
32 | ' | |
33 | ||
34 | test_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 | ||
40 | test_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 | ||
49 | test_done |