(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'filter-branch removal of trees with null sha1' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: base commits' span_id:17))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) (Token id:Id.Lit_Chars val:'\ttest_commit one &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\ttest_commit two &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\ttest_commit three\n' span_id:24) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup: a commit with a bogus null sha1 in the tree' span_id: 31 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:35) (Token id:Id.Lit_Chars val:'\t{\n' span_id:36) (Token id:Id.Lit_Chars val:'\t\tgit ls-tree HEAD &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\t\tprintf "160000 commit $_z40\\\\tbroken\\\\n"\n' span_id:38) (Token id:Id.Lit_Chars val:'\t} >broken-tree &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\techo "add broken entry" >msg &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\n' span_id:41) (Token id:Id.Lit_Chars val:'\ttree=$(git mktree <broken-tree) &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\tcommit=$(git commit-tree $tree -p HEAD <msg) &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit update-ref HEAD "$commit"\n' span_id:45) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: bring HEAD and index in sync' span_id:64))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:68) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "back to normal"\n' span_id:70) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'filter commands are still checked' span_id:77))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id:Id.Lit_Chars val:'\ttest_must_fail git filter-branch \\\n' span_id:82) (Token id:Id.Lit_Chars val:'\t\t--force --prune-empty \\\n' span_id:83) (Token id: Id.Lit_Chars val: '\t\t--index-filter "git rm --cached --ignore-unmatch three.t"\n' span_id: 84 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'removing the broken entry works' span_id:91))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:95) (Token id:Id.Lit_Chars val:'\techo three >expect &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tgit filter-branch \\\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\t--force --prune-empty \\\n' span_id:98) (Token id: Id.Lit_Chars val: '\t\t--index-filter "git rm --cached --ignore-unmatch broken" &&\n' span_id: 99 ) (Token id:Id.Lit_Chars val:'\tgit log -1 --format=%s >actual &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:101) ) } ) (C {(test_done)}) ] )