(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:'fetch/push involving alternates' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: count_objects
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:loose)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [22]
                )
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inpack)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [25]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(eval)} 
                  {
                    (DQ 
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:32)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(git)} {(count-objects)} {(-v)})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 's/^count: \\(.*\\)/loose=\\1/p'
                                          span_id: 51
                                        )
                                      )
                                    } {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^in-pack: \\(.*\\)/inpack=\\1/p' span_id:59))}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    )
                  }
                )
                (C {(echo)} 
                  {
                    (word_part.ArithSub
                      anode: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Plus
                          left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$loose')})
                          right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$inpack')})
                        )
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) (Token id:Id.Lit_Chars val:'\t(\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\t\tgit init original &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\tcd original &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\t\ti=0 &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t\twhile test $i -le 100\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\t\techo "$i" >count &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add count &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "$i" || exit\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\t\t\ti=$(($i + 1))\n' span_id:101) (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t(\n' span_id:104) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit clone --reference=original "file://$(pwd)/original" one &&\n'
            span_id: 105
          ) (Token id:Id.Lit_Chars val:'\t\tcd one &&\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\t\techo Z >count &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\t\tgit add count &&\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m Z &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\tcount_objects >../one.count\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tA=$(pwd)/original/.git/objects &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\tgit init receiver &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\techo "$A" >receiver/.git/objects/info/alternates &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\tgit init fetcher &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\techo "$A" >fetcher/.git/objects/info/alternates\n' span_id:116)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pushing into a repository with the same alternate'
            span_id: 123
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\tcd one &&\n' span_id:129) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push ../receiver master:refs/heads/it\n'
            span_id: 130
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\t(\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t\tcd receiver &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t\tcount_objects >../receiver.count\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\ttest_cmp one.count receiver.count\n' span_id:136)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fetching from a repository with the same alternate'
            span_id: 143
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:148) (Token id:Id.Lit_Chars val:'\t\tcd fetcher &&\n' span_id:149) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit fetch ../one master:refs/heads/it &&\n'
            span_id: 150
          ) (Token id:Id.Lit_Chars val:'\t\tcount_objects >../fetcher.count\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\ttest_cmp one.count fetcher.count\n' span_id:153)
        )
      }
    )
    (C {(test_done)})
  ]
)