(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"filter-branch removal of trees with null sha1">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <"setup: base commits">)} 
      {(SQ <"\n"> <"\ttest_commit one &&\n"> <"\ttest_commit two &&\n"> <"\ttest_commit three\n">)}
    )
    (C {(test_expect_success)} {(SQ <"setup: a commit with a bogus null sha1 in the tree">)} 
      {
        (SQ <"\n"> <"\t{\n"> <"\t\tgit ls-tree HEAD &&\n"> 
          <"\t\tprintf \"160000 commit $_z40\\\\tbroken\\\\n\"\n"> <"\t} >broken-tree &&\n"> <"\techo \"add broken entry\" >msg &&\n"> <"\n"> 
          <"\ttree=$(git mktree <broken-tree) &&\n"> <"\ttest_tick &&\n"> <"\tcommit=$(git commit-tree $tree -p HEAD <msg) &&\n"> 
          <"\tgit update-ref HEAD \"$commit\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup: bring HEAD and index in sync">)} 
      {(SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit commit -a -m \"back to normal\"\n">)}
    )
    (C {(test_expect_success)} {(SQ <"filter commands are still checked">)} 
      {
        (SQ <"\n"> <"\ttest_must_fail git filter-branch \\\n"> <"\t\t--force --prune-empty \\\n"> 
          <"\t\t--index-filter \"git rm --cached --ignore-unmatch three.t\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"removing the broken entry works">)} 
      {
        (SQ <"\n"> <"\techo three >expect &&\n"> <"\tgit filter-branch \\\n"> 
          <"\t\t--force --prune-empty \\\n"> <"\t\t--index-filter \"git rm --cached --ignore-unmatch broken\" &&\n"> 
          <"\tgit log -1 --format=%s >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_done)})
  ]
)