(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:'git cat-file' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: echo_without_newline
      body: 
        (command.BraceGroup
          children: [
            (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s' span_id:26))} {(DQ ($ Id.VSub_Star '$*'))})
          ]
        )
    )
    (command.ShFunction
      name: strlen
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(echo_without_newline)} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(wc)} {(-c)})
                (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^ *//' span_id:63))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: maybe_remove_timestamp
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(test)} {(-z)} {(DQ ($ Id.VSub_Number '$2'))})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:86)
                    )
                  ]
                  action: [(C {(echo_without_newline)} {(DQ ($ Id.VSub_Number '$1'))})]
                  spids: [77 88]
                )
              ]
              else_action: [
                (C {(echo_without_newline)} 
                  {
                    (DQ 
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:104)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:108))} 
                                    {(DQ ($ Id.VSub_Number '$1'))}
                                  )
                                  (C {(sed)} {(-e)} 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 's/ [0-9][0-9]* [-+][0-9][0-9][0-9][0-9]$//'
                                          span_id: 122
                                        )
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: run_tests
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:type)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [141]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sha1)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [145]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:size)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [149]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:content)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [153]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pretty_content)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$5')}
                  spids: [157]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:no_ts)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$6')}
                  spids: [161]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:batch_output)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$sha1') (' ') ($ Id.VSub_DollarName '$type') (' ') 
                        ($ Id.VSub_DollarName '$size') ('\n') ($ Id.VSub_DollarName '$content')
                      )
                    }
                  spids: [166]
                )
              ]
            )
            (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$type') (' exists'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit cat-file -e $sha1\n'
                    span_id: 188
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:189)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('Type of ') ($ Id.VSub_DollarName '$type') (' is correct'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo $type >expect &&\n'
                    span_id: 204
                  ) (Token id:Id.Lit_Chars val:'\tgit cat-file -t $sha1 >actual &&\n' span_id:205) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_cmp expect actual\n'
                    span_id: 206
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:207)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('Size of ') ($ Id.VSub_DollarName '$type') (' is correct'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:221) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo $size >expect &&\n'
                    span_id: 222
                  ) (Token id:Id.Lit_Chars val:'\tgit cat-file -s $sha1 >actual &&\n' span_id:223) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_cmp expect actual\n'
                    span_id: 224
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:225)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('Type of ') ($ Id.VSub_DollarName '$type') 
                  (' is correct using --allow-unknown-type')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:239) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo $type >expect &&\n'
                    span_id: 240
                  ) (Token id:Id.Lit_Chars val:'\tgit cat-file -t --allow-unknown-type $sha1 >actual &&\n' span_id:241) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_cmp expect actual\n'
                    span_id: 242
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:243)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('Size of ') ($ Id.VSub_DollarName '$type') 
                  (' is correct using --allow-unknown-type')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:257) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo $size >expect &&\n'
                    span_id: 258
                  ) (Token id:Id.Lit_Chars val:'\tgit cat-file -s --allow-unknown-type $sha1 >actual &&\n' span_id:259) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_cmp expect actual\n'
                    span_id: 260
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:261)
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$content'))})
                (C {(test_expect_success)} 
                  {(DQ ('Content of ') ($ Id.VSub_DollarName '$type') (' is correct'))} 
                  {
                    (SQ (Token id:Id.Lit_Chars val:'\n' span_id:286) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\tmaybe_remove_timestamp "$content" $no_ts >expect &&\n'
                        span_id: 287
                      ) 
                      (Token
                        id: Id.Lit_Chars
                        val: 
'\tmaybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts >actual &&\n'
                        span_id: 288
                      ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:289) 
                      (Token id:Id.Lit_Chars val:'    ' span_id:290)
                    )
                  }
                )
              ]
            )
            (C {(test_expect_success)} 
              {(DQ ('Pretty content of ') ($ Id.VSub_DollarName '$type') (' is correct'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:304) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tmaybe_remove_timestamp "$pretty_content" $no_ts >expect &&\n'
                    span_id: 305
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tmaybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts >actual &&\n'
                    span_id: 306
                  ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:307) 
                  (Token id:Id.Lit_Chars val:'    ' span_id:308)
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$content'))})
                (C {(test_expect_success)} 
                  {(DQ ('--batch output of ') ($ Id.VSub_DollarName '$type') (' is correct'))} 
                  {
                    (SQ (Token id:Id.Lit_Chars val:'\n' span_id:333) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\tmaybe_remove_timestamp "$batch_output" $no_ts >expect &&\n'
                        span_id: 334
                      ) 
                      (Token
                        id: Id.Lit_Chars
                        val: 
'\tmaybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts >actual &&\n'
                        span_id: 335
                      ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:336) 
                      (Token id:Id.Lit_Chars val:'    ' span_id:337)
                    )
                  }
                )
              ]
            )
            (C {(test_expect_success)} 
              {(DQ ('--batch-check output of ') ($ Id.VSub_DollarName '$type') (' is correct'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:351) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo "$sha1 $type $size" >expect &&\n'
                    span_id: 352
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo_without_newline $sha1 | git cat-file --batch-check >actual &&\n'
                    span_id: 353
                  ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:354) 
                  (Token id:Id.Lit_Chars val:'    ' span_id:355)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('custom --batch-check format'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:367) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo "$type $sha1" >expect &&\n'
                    span_id: 368
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\techo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual &&\n'
                    span_id: 369
                  ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:370) 
                  (Token id:Id.Lit_Chars val:'    ' span_id:371)
                )
              }
            )
            (C {(test_expect_success)} 
              {(SQ (Token id:Id.Lit_Chars val:'--batch-check with %(rest)' span_id:379))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:383) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\techo "$type this is some extra content" >expect &&\n'
                    span_id: 384
                  ) (Token id:Id.Lit_Chars val:'\techo "$sha1    this is some extra content" |\n' span_id:385) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit cat-file --batch-check="%(objecttype) %(rest)" >actual &&\n'
                    span_id: 386
                  ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:387) 
                  (Token id:Id.Lit_Chars val:'    ' span_id:388)
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$content'))})
                (C {(test_expect_success)} 
                  {(DQ ('--batch without type (') ($ Id.VSub_DollarName '$type') (')'))} 
                  {
                    (SQ (Token id:Id.Lit_Chars val:'\n' span_id:413) 
                      (Token id:Id.Lit_Chars val:'\t{\n' span_id:414) (Token id:Id.Lit_Chars val:'\t\techo "$size" &&\n' span_id:415) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\t\tmaybe_remove_timestamp "$content" $no_ts\n'
                        span_id: 416
                      ) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:417) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\techo $sha1 | git cat-file --batch="%(objectsize)" >actual.full &&\n'
                        span_id: 418
                      ) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\tmaybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&\n'
                        span_id: 419
                      ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:420) 
                      (Token id:Id.Lit_Chars val:'    ' span_id:421)
                    )
                  }
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$content'))})
                (C {(test_expect_success)} 
                  {(DQ ('--batch without size (') ($ Id.VSub_DollarName '$type') (')'))} 
                  {
                    (SQ (Token id:Id.Lit_Chars val:'\n' span_id:446) 
                      (Token id:Id.Lit_Chars val:'\t{\n' span_id:447) (Token id:Id.Lit_Chars val:'\t\techo "$type" &&\n' span_id:448) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\t\tmaybe_remove_timestamp "$content" $no_ts\n'
                        span_id: 449
                      ) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:450) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\techo $sha1 | git cat-file --batch="%(objecttype)" >actual.full &&\n'
                        span_id: 451
                      ) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\tmaybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&\n'
                        span_id: 452
                      ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:453) 
                      (Token id:Id.Lit_Chars val:'    ' span_id:454)
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:hello_content)
          op: assign_op.Equal
          rhs: {(DQ ('Hello World'))}
          spids: [460]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:hello_size)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:466)
                command_list: 
                  (command.CommandList
                    children: [(C {(strlen)} {(DQ ($ Id.VSub_DollarName '$hello_content'))})]
                  )
              )
            }
          spids: [465]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:hello_sha1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:475)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo_without_newline)} {(DQ ($ Id.VSub_DollarName '$hello_content'))})
                          (C {(git)} {(hash-object)} {(--stdin)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [474]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ (setup))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:499) 
          (Token
            id: Id.Lit_Chars
            val: '\techo_without_newline "$hello_content" > hello &&\n'
            span_id: 500
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --add hello\n' span_id:501)
        )
      }
    )
    (C {(run_tests)} {(SQ (Token id:Id.Lit_Chars val:blob span_id:508))} 
      {($ Id.VSub_DollarName '$hello_sha1')} {($ Id.VSub_DollarName '$hello_size')} {(DQ ($ Id.VSub_DollarName '$hello_content'))} 
      {(DQ ($ Id.VSub_DollarName '$hello_content'))}
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--batch-check without %(rest) considers whole line'
            span_id: 527
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:531) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$hello_sha1 blob $hello_size" >expect &&\n'
            span_id: 532
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --add --cacheinfo 100644 $hello_sha1 "white space" &&\n'
            span_id: 533
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-index --remove \\"white space\\"" &&\n'
            span_id: 534
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo ":white space" | git cat-file --batch-check >actual &&\n'
            span_id: 535
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:536)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tree_sha1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:541)
                command_list: (command.CommandList children:[(C {(git)} {(write-tree)})])
              )
            }
          spids: [540]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tree_size)
          op: assign_op.Equal
          rhs: {(33)}
          spids: [547]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tree_pretty_content)
          op: assign_op.Equal
          rhs: {(DQ ('100644 blob ') ($ Id.VSub_DollarName '$hello_sha1') ('\thello'))}
          spids: [550]
        )
      ]
    )
    (C {(run_tests)} {(SQ (Token id:Id.Lit_Chars val:tree span_id:561))} 
      {($ Id.VSub_DollarName '$tree_sha1')} {($ Id.VSub_DollarName '$tree_size')} {(DQ )} {(DQ ($ Id.VSub_DollarName '$tree_pretty_content'))}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:commit_message)
          op: assign_op.Equal
          rhs: {(DQ ('Initial commit'))}
          spids: [576]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:commit_sha1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:582)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo_without_newline)} {(DQ ($ Id.VSub_DollarName '$commit_message'))})
                          (C {(git)} {(commit-tree)} {($ Id.VSub_DollarName '$tree_sha1')})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [581]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:commit_size)
          op: assign_op.Equal
          rhs: {(177)}
          spids: [598]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:commit_content)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ('tree ') ($ Id.VSub_DollarName '$tree_sha1') ('\n') ('author ') 
                ($ Id.VSub_DollarName '$GIT_AUTHOR_NAME') (' <') ($ Id.VSub_DollarName '$GIT_AUTHOR_EMAIL') ('> 0000000000 +0000\n') ('committer ') 
                ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME') (' <') ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL') ('> 0000000000 +0000\n') ('\n') 
                ($ Id.VSub_DollarName '$commit_message')
              )
            }
          spids: [601]
        )
      ]
    )
    (C {(run_tests)} {(SQ (Token id:Id.Lit_Chars val:commit span_id:624))} 
      {($ Id.VSub_DollarName '$commit_sha1')} {($ Id.VSub_DollarName '$commit_size')} {(DQ ($ Id.VSub_DollarName '$commit_content'))} 
      {(DQ ($ Id.VSub_DollarName '$commit_content'))} {(1)}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tag_header_without_timestamp)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ('object ') ($ Id.VSub_DollarName '$hello_sha1') ('\n') ('type blob\n') 
                ('tag hellotag\n') ('tagger ') ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME') (' <') 
                ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL') ('>')
              )
            }
          spids: [642]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tag_description)
          op: assign_op.Equal
          rhs: {(DQ ('This is a tag'))}
          spids: [656]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tag_content)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$tag_header_without_timestamp') (' 0000000000 +0000\n') ('\n') 
                ($ Id.VSub_DollarName '$tag_description')
              )
            }
          spids: [661]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tag_sha1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:671)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo_without_newline)} {(DQ ($ Id.VSub_DollarName '$tag_content'))})
                          (C {(git)} {(mktag)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [670]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tag_size)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:686)
                command_list: 
                  (command.CommandList
                    children: [(C {(strlen)} {(DQ ($ Id.VSub_DollarName '$tag_content'))})]
                  )
              )
            }
          spids: [685]
        )
      ]
    )
    (C {(run_tests)} {(SQ (Token id:Id.Lit_Chars val:tag span_id:698))} 
      {($ Id.VSub_DollarName '$tag_sha1')} {($ Id.VSub_DollarName '$tag_size')} {(DQ ($ Id.VSub_DollarName '$tag_content'))} 
      {(DQ ($ Id.VSub_DollarName '$tag_content'))} {(1)}
    )
    (C {(test_expect_success)} {(DQ ('Reach a blob from a tag pointing to it'))} 
      {
        (DQ ("test '") ($ Id.VSub_DollarName '$hello_content') ("' = ") 
          (word_part.EscapedLiteral
            token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:730)
          ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:731)) 
          ('(git cat-file blob ') ($ Id.VSub_DollarName '$tag_sha1') (')') 
          (word_part.EscapedLiteral
            token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:735)
          )
        )
      }
    )
    (command.ForEach
      iter_name: batch
      iter_words: [{(batch)} {(batch-check)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ForEach
              iter_name: opt
              iter_words: [{(t)} {(s)} {(e)} {(p)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(test_expect_success)} 
                      {
                        (DQ ('Passing -') ($ Id.VSub_DollarName '$opt') (' with --') 
                          ($ Id.VSub_DollarName '$batch') (' fails')
                        )
                      } 
                      {
                        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:781) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t    test_must_fail git cat-file --$batch -$opt $hello_sha1\n'
                            span_id: 782
                          ) (Token id:Id.Lit_Chars val:'\t' span_id:783)
                        )
                      }
                    )
                    (C {(test_expect_success)} 
                      {
                        (DQ ('Passing --') ($ Id.VSub_DollarName '$batch') (' with -') 
                          ($ Id.VSub_DollarName '$opt') (' fails')
                        )
                      } 
                      {
                        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:799) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t    test_must_fail git cat-file -$opt --$batch $hello_sha1\n'
                            span_id: 800
                          ) (Token id:Id.Lit_Chars val:'\t' span_id:801)
                        )
                      }
                    )
                  ]
                )
            )
            (C {(test_expect_success)} 
              {(DQ ('Passing <type> with --') ($ Id.VSub_DollarName '$batch') (' fails'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:818) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_must_fail git cat-file --$batch blob $hello_sha1\n'
                    span_id: 819
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:820)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('Passing --') ($ Id.VSub_DollarName '$batch') (' with <type> fails'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:834) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_must_fail git cat-file blob --$batch $hello_sha1\n'
                    span_id: 835
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:836)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('Passing sha1 with --') ($ Id.VSub_DollarName '$batch') (' fails'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:850) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest_must_fail git cat-file --$batch $hello_sha1\n'
                    span_id: 851
                  ) (Token id:Id.Lit_Chars val:'    ' span_id:852)
                )
              }
            )
          ]
        )
    )
    (command.ForEach
      iter_name: opt
      iter_words: [{(t)} {(s)} {(e)} {(p)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('Passing -') ($ Id.VSub_DollarName '$opt') (' with --follow-symlinks fails'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:884) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    test_must_fail git cat-file --follow-symlinks -$opt $hello_sha1\n'
                    span_id: 885
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:886)
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} {(DQ ('--batch-check for a non-existent named object'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:899) 
          (Token id:Id.Lit_Chars val:'    test "foobar42 missing\n' span_id:900) (Token id:Id.Lit_Chars val:'foobar84 missing" = \\\n' span_id:901) 
          (Token
            id: Id.Lit_Chars
            val: 
'    "$( ( echo foobar42; echo_without_newline foobar84; ) | git cat-file --batch-check)"\n'
            span_id: 902
          )
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('--batch-check for a non-existent hash'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:913) 
          (Token
            id: Id.Lit_Chars
            val: '    test "0000000000000000000000000000000000000042 missing\n'
            span_id: 914
          ) (Token id:Id.Lit_Chars val:'0000000000000000000000000000000000000084 missing" = \\\n' span_id:915) 
          (Token
            id: Id.Lit_Chars
            val: '    "$( ( echo 0000000000000000000000000000000000000042;\n'
            span_id: 916
          ) 
          (Token
            id: Id.Lit_Chars
            val: '         echo_without_newline 0000000000000000000000000000000000000084; ) \\\n'
            span_id: 917
          ) (Token id:Id.Lit_Chars val:'       | git cat-file --batch-check)"\n' span_id:918)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('--batch for an existent and a non-existent hash'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:929) 
          (Token id:Id.Lit_Chars val:'    test "$tag_sha1 tag $tag_size\n' span_id:930) (Token id:Id.Lit_Chars val:'$tag_content\n' span_id:931) 
          (Token
            id: Id.Lit_Chars
            val: '0000000000000000000000000000000000000000 missing" = \\\n'
            span_id: 932
          ) (Token id:Id.Lit_Chars val:'    "$( ( echo $tag_sha1;\n' span_id:933) 
          (Token
            id: Id.Lit_Chars
            val: '         echo_without_newline 0000000000000000000000000000000000000000; ) \\\n'
            span_id: 934
          ) (Token id:Id.Lit_Chars val:'       | git cat-file --batch)"\n' span_id:935)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('--batch-check for an empty line'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:946) 
          (Token
            id: Id.Lit_Chars
            val: '    test " missing" = "$(echo | git cat-file --batch-check)"\n'
            span_id: 947
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'empty --batch-check notices missing object' span_id:954))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:958) 
          (Token id:Id.Lit_Chars val:'\techo "$_z40 missing" >expect &&\n' span_id:959) (Token id:Id.Lit_Chars val:'\techo "$_z40" | git cat-file --batch-check="" >actual &&\n' span_id:960) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:961)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:batch_input)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$hello_sha1') ('\n') ($ Id.VSub_DollarName '$commit_sha1') 
                ('\n') ($ Id.VSub_DollarName '$tag_sha1') ('\n') ('deadbeef\n') ('\n')
              )
            }
          spids: [965]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:batch_output)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$hello_sha1') (' blob ') ($ Id.VSub_DollarName '$hello_size') 
                ('\n') ($ Id.VSub_DollarName '$hello_content') ('\n') ($ Id.VSub_DollarName '$commit_sha1') (' commit ') 
                ($ Id.VSub_DollarName '$commit_size') ('\n') ($ Id.VSub_DollarName '$commit_content') ('\n') ($ Id.VSub_DollarName '$tag_sha1') (' tag ') 
                ($ Id.VSub_DollarName '$tag_size') ('\n') ($ Id.VSub_DollarName '$tag_content') ('\n') ('deadbeef missing\n') (' missing')
              )
            }
          spids: [978]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--batch with multiple sha1s gives correct format'
            span_id: 1006
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1010) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest "$(maybe_remove_timestamp "$batch_output" 1)" = "$(maybe_remove_timestamp "$(echo_without_newline "$batch_input" | git cat-file --batch)" 1)"\n'
            span_id: 1011
          )
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:batch_check_input)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$hello_sha1') ('\n') ($ Id.VSub_DollarName '$tree_sha1') ('\n') 
                ($ Id.VSub_DollarName '$commit_sha1') ('\n') ($ Id.VSub_DollarName '$tag_sha1') ('\n') ('deadbeef\n') ('\n')
              )
            }
          spids: [1015]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:batch_check_output)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$hello_sha1') (' blob ') ($ Id.VSub_DollarName '$hello_size') 
                ('\n') ($ Id.VSub_DollarName '$tree_sha1') (' tree ') ($ Id.VSub_DollarName '$tree_size') ('\n') 
                ($ Id.VSub_DollarName '$commit_sha1') (' commit ') ($ Id.VSub_DollarName '$commit_size') ('\n') ($ Id.VSub_DollarName '$tag_sha1') (' tag ') 
                ($ Id.VSub_DollarName '$tag_size') ('\n') ('deadbeef missing\n') (' missing')
              )
            }
          spids: [1030]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('--batch-check with multiple sha1s gives correct format'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1060) 
          (Token id:Id.Lit_Chars val:'    test "$batch_check_output" = \\\n' span_id:1061) 
          (Token
            id: Id.Lit_Chars
            val: '    "$(echo_without_newline "$batch_check_input" | git cat-file --batch-check)"\n'
            span_id: 1062
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup blobs which are likely to delta' span_id:1069))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1073) 
          (Token id:Id.Lit_Chars val:'\ttest-genrandom foo 10240 >foo &&\n' span_id:1074) (Token id:Id.Lit_Chars val:'\t{ cat foo; echo plus; } >foo-plus &&\n' span_id:1075) 
          (Token id:Id.Lit_Chars val:'\tgit add foo foo-plus &&\n' span_id:1076) (Token id:Id.Lit_Chars val:'\tgit commit -m foo &&\n' span_id:1077) 
          (Token id:Id.Lit_Chars val:'\tcat >blobs <<-\\EOF\n' span_id:1078) (Token id:Id.Lit_Chars val:'\tHEAD:foo\n' span_id:1079) 
          (Token id:Id.Lit_Chars val:'\tHEAD:foo-plus\n' span_id:1080) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1081)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'confirm that neither loose blob is a delta' span_id:1088))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1092) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1093) (Token id:Id.Lit_Chars val:'\t$_z40\n' span_id:1094) 
          (Token id:Id.Lit_Chars val:'\t$_z40\n' span_id:1095) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1096) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file --batch-check="%(deltabase)" <blobs >actual &&\n'
            span_id: 1097
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1098)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'%(deltabase) reports packed delta bases' span_id:1120))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1124) 
          (Token id:Id.Lit_Chars val:'\tgit repack -ad &&\n' span_id:1125) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file --batch-check="%(deltabase)" <blobs >actual &&\n'
            span_id: 1126
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1127) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgrep "$(git rev-parse HEAD:foo)" actual ||\n'
            span_id: 1128
          ) (Token id:Id.Lit_Chars val:'\t\tgrep "$(git rev-parse HEAD:foo-plus)" actual\n' span_id:1129) 
          (Token id:Id.Lit_Chars val:'\t}\n' span_id:1130)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_type)
          op: assign_op.Equal
          rhs: {(DQ (bogus))}
          spids: [1134]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_content)
          op: assign_op.Equal
          rhs: {(DQ (bogus))}
          spids: [1139]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_size)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1145)
                command_list: 
                  (command.CommandList
                    children: [(C {(strlen)} {(DQ ($ Id.VSub_DollarName '$bogus_content'))})]
                  )
              )
            }
          spids: [1144]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_sha1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1154)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo_without_newline)} {(DQ ($ Id.VSub_DollarName '$bogus_content'))})
                          (C {(git)} {(hash-object)} {(-t)} {($ Id.VSub_DollarName '$bogus_type')} 
                            {(--literally)} {(-w)} {(--stdin)}
                          )
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [1153]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('Type of broken object is correct'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1186) 
          (Token id:Id.Lit_Chars val:'\techo $bogus_type >expect &&\n' span_id:1187) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file -t --allow-unknown-type $bogus_sha1 >actual &&\n'
            span_id: 1188
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1189)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('Size of broken object is correct'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1200) 
          (Token id:Id.Lit_Chars val:'\techo $bogus_size >expect &&\n' span_id:1201) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file -s --allow-unknown-type $bogus_sha1 >actual &&\n'
            span_id: 1202
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1203)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_type)
          op: assign_op.Equal
          rhs: {(DQ (abcdefghijklmnopqrstuvwxyz1234679))}
          spids: [1206]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_content)
          op: assign_op.Equal
          rhs: {(DQ (bogus))}
          spids: [1211]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_size)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1217)
                command_list: 
                  (command.CommandList
                    children: [(C {(strlen)} {(DQ ($ Id.VSub_DollarName '$bogus_content'))})]
                  )
              )
            }
          spids: [1216]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bogus_sha1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1226)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo_without_newline)} {(DQ ($ Id.VSub_DollarName '$bogus_content'))})
                          (C {(git)} {(hash-object)} {(-t)} {($ Id.VSub_DollarName '$bogus_type')} 
                            {(--literally)} {(-w)} {(--stdin)}
                          )
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [1225]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('Type of broken object is correct when type is large'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1258) 
          (Token id:Id.Lit_Chars val:'\techo $bogus_type >expect &&\n' span_id:1259) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file -t --allow-unknown-type $bogus_sha1 >actual &&\n'
            span_id: 1260
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1261)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('Size of large broken object is correct when type is large'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1272) 
          (Token id:Id.Lit_Chars val:'\techo $bogus_size >expect &&\n' span_id:1273) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file -s --allow-unknown-type $bogus_sha1 >actual &&\n'
            span_id: 1274
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1275)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prep for symlink tests' span_id:1285))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1289) 
          (Token
            id: Id.Lit_Chars
            val: '\techo_without_newline "$hello_content" >morx &&\n'
            span_id: 1290
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add morx same-dir-link &&\n' span_id:1291) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir link-to-dir &&\n' span_id:1292) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add ../fleem out-of-repo-link &&\n' span_id:1293) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add .. out-of-repo-link-dir &&\n'
            span_id: 1294
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add same-dir-link link-to-link &&\n' span_id:1295) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add nope broken-same-dir-link &&\n'
            span_id: 1296
          ) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:1297) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../morx dir/parent-dir-link &&\n'
            span_id: 1298
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add .. dir/link-dir &&\n' span_id:1299) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../../escape dir/out-of-repo-link &&\n'
            span_id: 1300
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add ../.. dir/out-of-repo-link-dir &&\n' span_id:1301) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add nope dir/broken-link-in-dir &&\n'
            span_id: 1302
          ) (Token id:Id.Lit_Chars val:'\tmkdir dir/subdir &&\n' span_id:1303) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../../morx dir/subdir/grandparent-dir-link &&\n'
            span_id: 1304
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../../../great-escape dir/subdir/out-of-repo-link &&\n'
            span_id: 1305
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../../.. dir/subdir/out-of-repo-link-dir &&\n'
            span_id: 1306
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../../../ dir/subdir/out-of-repo-link-dir-trailing &&\n'
            span_id: 1307
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../parent-dir-link dir/subdir/parent-dir-link-to-link &&\n'
            span_id: 1308
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo_without_newline "$hello_content" >dir/subdir/ind2 &&\n'
            span_id: 1309
          ) (Token id:Id.Lit_Chars val:'\techo_without_newline "$hello_content" >dir/ind1 &&\n' span_id:1310) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir dirlink &&\n' span_id:1311) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir/subdir subdirlink &&\n' span_id:1312) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add subdir/ind2 dir/link-to-child &&\n'
            span_id: 1313
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir/link-to-child link-to-down-link &&\n' span_id:1314) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir/.. up-down &&\n' span_id:1315) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir/../ up-down-trailing &&\n' span_id:1316) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add dir/../morx up-down-file &&\n'
            span_id: 1317
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add dir/../../morx up-up-down-file &&\n' span_id:1318) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add subdirlink/../../morx up-two-down-file &&\n'
            span_id: 1319
          ) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add loop1 loop2 &&\n' span_id:1320) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add loop2 loop1 &&\n' span_id:1321) (Token id:Id.Lit_Chars val:'\tgit add morx dir/subdir/ind2 dir/ind1 &&\n' span_id:1322) 
          (Token id:Id.Lit_Chars val:'\tgit commit -am "test" &&\n' span_id:1323) (Token id:Id.Lit_Chars val:'\techo $hello_sha1 blob $hello_size >found\n' span_id:1324)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for non-links'
            span_id: 1331
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1335) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:morx | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1336
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual &&\n' span_id:1337) 
          (Token id:Id.Lit_Chars val:'\techo HEAD:nope missing >expect &&\n' span_id:1338) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:nope | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1339
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1340)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for in-repo, same-dir links'
            span_id: 1347
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1351) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:same-dir-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1352
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1353)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for in-repo, links to dirs'
            span_id: 1360
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1364) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:link-to-dir/ind1 | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1365
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1366)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'git cat-file --batch-check --follow-symlinks works for broken in-repo, same-dir links'
            span_id: 1374
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1378) 
          (Token id:Id.Lit_Chars val:'\techo dangling 25 >expect &&\n' span_id:1379) (Token id:Id.Lit_Chars val:'\techo HEAD:broken-same-dir-link >>expect &&\n' span_id:1380) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:broken-same-dir-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1381
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1382)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for same-dir links-to-links'
            span_id: 1389
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1393) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:link-to-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1394
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1395)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for parent-dir links'
            span_id: 1402
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1406) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/parent-dir-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1407
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual &&\n' span_id:1408) 
          (Token id:Id.Lit_Chars val:'\techo notdir 29 >expect &&\n' span_id:1409) (Token id:Id.Lit_Chars val:'\techo HEAD:dir/parent-dir-link/nope >>expect &&\n' span_id:1410) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/parent-dir-link/nope | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1411
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1412)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for .. links'
            span_id: 1419
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1423) 
          (Token id:Id.Lit_Chars val:'\techo dangling 22 >expect &&\n' span_id:1424) (Token id:Id.Lit_Chars val:'\techo HEAD:dir/link-dir/nope >>expect &&\n' span_id:1425) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/link-dir/nope | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1426
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1427) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/link-dir/morx | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1428
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual &&\n' span_id:1429) 
          (Token id:Id.Lit_Chars val:'\techo dangling 27 >expect &&\n' span_id:1430) (Token id:Id.Lit_Chars val:'\techo HEAD:dir/broken-link-in-dir >>expect &&\n' span_id:1431) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/broken-link-in-dir | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1432
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1433)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for ../.. links'
            span_id: 1440
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1444) 
          (Token id:Id.Lit_Chars val:'\techo notdir 41 >expect &&\n' span_id:1445) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:dir/subdir/grandparent-dir-link/nope >>expect &&\n'
            span_id: 1446
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/subdir/grandparent-dir-link/nope | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1447
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1448) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/subdir/grandparent-dir-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1449
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual &&\n' span_id:1450) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/subdir/parent-dir-link-to-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1451
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1452)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for dir/ links'
            span_id: 1459
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1463) 
          (Token id:Id.Lit_Chars val:'\techo dangling 17 >expect &&\n' span_id:1464) (Token id:Id.Lit_Chars val:'\techo HEAD:dirlink/morx >>expect &&\n' span_id:1465) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dirlink/morx | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1466
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1467) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $hello_sha1 blob $hello_size >expect &&\n'
            span_id: 1468
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dirlink/ind1 | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1469
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1470)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for dir/subdir links'
            span_id: 1477
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1481) 
          (Token id:Id.Lit_Chars val:'\techo dangling 20 >expect &&\n' span_id:1482) (Token id:Id.Lit_Chars val:'\techo HEAD:subdirlink/morx >>expect &&\n' span_id:1483) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:subdirlink/morx | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1484
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1485) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:subdirlink/ind2 | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1486
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1487)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for dir ->subdir links'
            span_id: 1494
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1498) 
          (Token id:Id.Lit_Chars val:'\techo notdir 27 >expect &&\n' span_id:1499) (Token id:Id.Lit_Chars val:'\techo HEAD:dir/link-to-child/morx >>expect &&\n' span_id:1500) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/link-to-child/morx | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1501
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1502) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/link-to-child | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1503
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual &&\n' span_id:1504) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:link-to-down-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1505
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1506)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks'
            span_id: 1513
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1517) 
          (Token id:Id.Lit_Chars val:'\techo symlink 8 >expect &&\n' span_id:1518) (Token id:Id.Lit_Chars val:'\techo ../fleem >>expect &&\n' span_id:1519) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:out-of-repo-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1520
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1521) 
          (Token id:Id.Lit_Chars val:'\techo symlink 2 >expect &&\n' span_id:1522) (Token id:Id.Lit_Chars val:'\techo .. >>expect &&\n' span_id:1523) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1524
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1525)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in dirs'
            span_id: 1532
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1536) 
          (Token id:Id.Lit_Chars val:'\techo symlink 9 >expect &&\n' span_id:1537) (Token id:Id.Lit_Chars val:'\techo ../escape >>expect &&\n' span_id:1538) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/out-of-repo-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1539
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1540) 
          (Token id:Id.Lit_Chars val:'\techo symlink 2 >expect &&\n' span_id:1541) (Token id:Id.Lit_Chars val:'\techo .. >>expect &&\n' span_id:1542) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1543
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1544)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in subdirs'
            span_id: 1551
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1555) 
          (Token id:Id.Lit_Chars val:'\techo symlink 15 >expect &&\n' span_id:1556) (Token id:Id.Lit_Chars val:'\techo ../great-escape >>expect &&\n' span_id:1557) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/subdir/out-of-repo-link | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1558
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1559) 
          (Token id:Id.Lit_Chars val:'\techo symlink 2 >expect &&\n' span_id:1560) (Token id:Id.Lit_Chars val:'\techo .. >>expect &&\n' span_id:1561) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/subdir/out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1562
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1563) 
          (Token id:Id.Lit_Chars val:'\techo symlink 3 >expect &&\n' span_id:1564) (Token id:Id.Lit_Chars val:'\techo ../ >>expect &&\n' span_id:1565) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:dir/subdir/out-of-repo-link-dir-trailing | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1566
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1567)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlinks works for symlinks with internal ..'
            span_id: 1574
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1578) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD: | git cat-file --batch-check >expect &&\n'
            span_id: 1579
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:up-down | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1580
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1581) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:up-down-trailing | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1582
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1583) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:up-down-file | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1584
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual &&\n' span_id:1585) 
          (Token id:Id.Lit_Chars val:'\techo symlink 7 >expect &&\n' span_id:1586) (Token id:Id.Lit_Chars val:'\techo ../morx >>expect &&\n' span_id:1587) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:up-up-down-file | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1588
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1589) 
          (Token
            id: Id.Lit_Chars
            val: 
'\techo HEAD:up-two-down-file | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1590
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp found actual\n' span_id:1591)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch-check --follow-symlink breaks loops'
            span_id: 1598
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1602) 
          (Token id:Id.Lit_Chars val:'\techo loop 10 >expect &&\n' span_id:1603) (Token id:Id.Lit_Chars val:'\techo HEAD:loop1 >>expect &&\n' span_id:1604) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:loop1 | git cat-file --batch-check --follow-symlinks >actual &&\n'
            span_id: 1605
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1606)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file --batch --follow-symlink returns correct sha and mode'
            span_id: 1613
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1617) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:morx | git cat-file --batch >expect &&\n'
            span_id: 1618
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo HEAD:morx | git cat-file --batch --follow-symlinks >actual &&\n'
            span_id: 1619
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1620)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cat-file --batch-all-objects shows all objects' span_id:1627))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1631) 
          (Token
            id: Id.Lit_Chars
            val: '\t# make new repos so we know the full set of objects; we will\n'
            span_id: 1632
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# also make sure that there are some packed and some loose\n'
            span_id: 1633
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# objects, some referenced and some not, and that there are\n'
            span_id: 1634
          ) (Token id:Id.Lit_Chars val:'\t# some available only via alternates.\n' span_id:1635) 
          (Token id:Id.Lit_Chars val:'\tgit init all-one &&\n' span_id:1636) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1637) 
          (Token id:Id.Lit_Chars val:'\t\tcd all-one &&\n' span_id:1638) (Token id:Id.Lit_Chars val:'\t\techo content >file &&\n' span_id:1639) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:1640) (Token id:Id.Lit_Chars val:'\t\tgit commit -qm base &&\n' span_id:1641) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-parse HEAD HEAD^{tree} HEAD:file &&\n'
            span_id: 1642
          ) (Token id:Id.Lit_Chars val:'\t\tgit repack -ad &&\n' span_id:1643) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo not-cloned | git hash-object -w --stdin\n'
            span_id: 1644
          ) (Token id:Id.Lit_Chars val:'\t) >expect.unsorted &&\n' span_id:1645) 
          (Token id:Id.Lit_Chars val:'\tgit clone -s all-one all-two &&\n' span_id:1646) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1647) 
          (Token id:Id.Lit_Chars val:'\t\tcd all-two &&\n' span_id:1648) (Token id:Id.Lit_Chars val:'\t\techo local-unref | git hash-object -w --stdin\n' span_id:1649) 
          (Token id:Id.Lit_Chars val:'\t) >>expect.unsorted &&\n' span_id:1650) (Token id:Id.Lit_Chars val:'\tsort <expect.unsorted >expect &&\n' span_id:1651) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C all-two cat-file --batch-all-objects \\\n'
            span_id: 1652
          ) (Token id:Id.Lit_Chars val:'\t\t\t\t--batch-check="%(objectname)" >actual &&\n' span_id:1653) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1654)
        )
      }
    )
    (C {(test_done)})
  ]
)