]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7008-filter-branch-null-sha1.sh
The third batch
[thirdparty/git.git] / t / t7008-filter-branch-null-sha1.sh
CommitLineData
83bd7437
JK
1#!/bin/sh
2
3test_description='filter-branch removal of trees with null sha1'
a52f07af 4
83bd7437
JK
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 &&
8125a58b 16 printf "160000 commit $ZERO_OID\\tbroken\\n"
99094a7a 17 } >broken-tree &&
83bd7437
JK
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
a96d3cc3
JK
35test_expect_success 'noop filter-branch complains' '
36 test_must_fail git filter-branch \
37 --force --prune-empty \
38 --index-filter "true"
39'
40
83bd7437
JK
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