(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'for-each-ref errors for broken refs'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ZEROS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$_z40')}
          spids: [15]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MISSING)
          op: assign_op.Equal
          rhs: {<abababababababababababababababababababab>}
          spids: [18]
        )
      ]
    )
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\tgit commit --allow-empty -m "Initial" &&\n'> <'\tgit tag testtag &&\n'> 
          <'\tgit for-each-ref >full-list &&\n'> <'\tgit for-each-ref --format="%(objectname) %(refname)" >brief-list\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Broken refs are reported correctly'>)} 
      {
        (SQ <'\n'> <'\tr=refs/heads/bogus &&\n'> <'\t: >.git/$r &&\n'> 
          <'\ttest_when_finished "rm -f .git/$r" &&\n'> <'\techo "warning: ignoring broken ref $r" >broken-err &&\n'> <'\tgit for-each-ref >out 2>err &&\n'> 
          <'\ttest_i18ncmp full-list out &&\n'> <'\ttest_i18ncmp broken-err err\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'NULL_SHA1 refs are reported correctly'>)} 
      {
        (SQ <'\n'> <'\tr=refs/heads/zeros &&\n'> <'\techo $ZEROS >.git/$r &&\n'> 
          <'\ttest_when_finished "rm -f .git/$r" &&\n'> <'\techo "warning: ignoring broken ref $r" >zeros-err &&\n'> <'\tgit for-each-ref >out 2>err &&\n'> 
          <'\ttest_cmp full-list out &&\n'> <'\ttest_i18ncmp zeros-err err &&\n'> 
          <'\tgit for-each-ref --format="%(objectname) %(refname)" >brief-out 2>brief-err &&\n'> <'\ttest_cmp brief-list brief-out &&\n'> <'\ttest_i18ncmp zeros-err brief-err\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Missing objects are reported correctly'>)} 
      {
        (SQ <'\n'> <'\tr=refs/heads/missing &&\n'> <'\techo $MISSING >.git/$r &&\n'> 
          <'\ttest_when_finished "rm -f .git/$r" &&\n'> <'\techo "fatal: missing object $MISSING for $r" >missing-err &&\n'> 
          <'\ttest_must_fail git for-each-ref 2>err &&\n'> <'\ttest_i18ncmp missing-err err &&\n'> <'\t(\n'> <'\t\tcat brief-list &&\n'> 
          <'\t\techo "$MISSING $r"\n'> <'\t) | sort -k 2 >missing-brief-expected &&\n'> 
          <'\tgit for-each-ref --format="%(objectname) %(refname)" >brief-out 2>brief-err &&\n'> <'\ttest_cmp missing-brief-expected brief-out &&\n'> <'\ttest_must_be_empty brief-err\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)