(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'test automatic tag following'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<setup>}
        {
          (SQ <'\n'> <'\ttest_tick &&\n'> <'\techo ichi >file &&\n'> <'\tgit add file &&\n'> 
            <'\tgit commit -m L &&\n'> <'\tL=$(git rev-parse --verify HEAD) &&\n'> <'\n'> <'\t(\n'> <'\t\tmkdir cloned &&\n'> 
            <'\t\tcd cloned &&\n'> <'\t\tgit init-db &&\n'> <'\t\tgit remote add -f origin ..\n'> <'\t) &&\n'> <'\n'> <'\ttest_tick &&\n'> 
            <'\techo A >file &&\n'> <'\tgit add file &&\n'> <'\tgit commit -m A &&\n'> <'\tA=$(git rev-parse --verify HEAD)\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'U='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'U='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'U='> name:U)
          op: assign_op.Equal
          rhs: {<UPLOAD_LOG>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'UPATH='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'UPATH='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'UPATH='> name:UPATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <pwd>
                      more_env: []
                      words: [{<pwd>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                ) <'/'> ($ Id.VSub_DollarName U)
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup expect'>)}
        {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $A\n'> <'EOF\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <get_needs>
      name: get_needs
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {(DQ ($ Id.VSub_Number 1))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <perl>
                  more_env: []
                  words: [
                    {<perl>}
                    {<-alne>}
                    {
                      (SQ <'\n'> <'\t\tnext unless $F[1] eq "upload-pack<";\n'> 
                        <'\t\tlast if $F[2] eq "0000";\n'> <'\t\tprint $F[2], " ", $F[3];\n'> <'\t'>
                      )
                    }
                    {(DQ ($ Id.VSub_Number 1))}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'fetch A (new commit : 1 connection)'>)}
        {
          (SQ <'\n'> <'\trm -f $U &&\n'> <'\t(\n'> <'\t\tcd cloned &&\n'> 
            <'\t\tGIT_TRACE_PACKET=$UPATH git fetch &&\n'> <'\t\ttest $A = $(git rev-parse --verify origin/master)\n'> <'\t) &&\n'> 
            <'\tget_needs $U >actual &&\n'> <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(DQ <'create tag T on A, create C on branch cat'>)}
        {
          (SQ <'\n'> <'\tgit tag -a -m tag1 tag1 $A &&\n'> <'\tT=$(git rev-parse --verify tag1) &&\n'> 
            <'\n'> <'\tgit checkout -b cat &&\n'> <'\techo C >file &&\n'> <'\tgit add file &&\n'> 
            <'\tgit commit -m C &&\n'> <'\tC=$(git rev-parse --verify HEAD) &&\n'> <'\tgit checkout master\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup expect'>)}
        {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $C\n'> <'want $T\n'> <'EOF\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'fetch C, T (new branch, tag : 1 connection)'>)}
        {
          (SQ <'\n'> <'\trm -f $U &&\n'> <'\t(\n'> <'\t\tcd cloned &&\n'> 
            <'\t\tGIT_TRACE_PACKET=$UPATH git fetch &&\n'> <'\t\ttest $C = $(git rev-parse --verify origin/cat) &&\n'> 
            <'\t\ttest $T = $(git rev-parse --verify tag1) &&\n'> <'\t\ttest $A = $(git rev-parse --verify tag1^0)\n'> <'\t) &&\n'> <'\tget_needs $U >actual &&\n'> 
            <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(DQ <'create commits O, B, tag S on B'>)}
        {
          (SQ <'\n'> <'\ttest_tick &&\n'> <'\techo O >file &&\n'> <'\tgit add file &&\n'> 
            <'\tgit commit -m O &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo B >file &&\n'> <'\tgit add file &&\n'> <'\tgit commit -m B &&\n'> 
            <'\tB=$(git rev-parse --verify HEAD) &&\n'> <'\n'> <'\tgit tag -a -m tag2 tag2 $B &&\n'> <'\tS=$(git rev-parse --verify tag2)\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup expect'>)}
        {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $B\n'> <'want $S\n'> <'EOF\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'fetch B, S (commit and tag : 1 connection)'>)}
        {
          (SQ <'\n'> <'\trm -f $U &&\n'> <'\t(\n'> <'\t\tcd cloned &&\n'> 
            <'\t\tGIT_TRACE_PACKET=$UPATH git fetch &&\n'> <'\t\ttest $B = $(git rev-parse --verify origin/master) &&\n'> 
            <'\t\ttest $B = $(git rev-parse --verify tag2^0) &&\n'> <'\t\ttest $S = $(git rev-parse --verify tag2)\n'> <'\t) &&\n'> <'\tget_needs $U >actual &&\n'> 
            <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup expect'>)}
        {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $B\n'> <'want $S\n'> <'EOF\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'new clone fetch master and tags'>)}
        {
          (SQ <'\n'> <'\ttest_might_fail git branch -D cat &&\n'> <'\trm -f $U &&\n'> <'\t(\n'> 
            <'\t\tmkdir clone2 &&\n'> <'\t\tcd clone2 &&\n'> <'\t\tgit init &&\n'> <'\t\tgit remote add origin .. &&\n'> 
            <'\t\tGIT_TRACE_PACKET=$UPATH git fetch &&\n'> <'\t\ttest $B = $(git rev-parse --verify origin/master) &&\n'> 
            <'\t\ttest $S = $(git rev-parse --verify tag2) &&\n'> <'\t\ttest $B = $(git rev-parse --verify tag2^0) &&\n'> 
            <'\t\ttest $T = $(git rev-parse --verify tag1) &&\n'> <'\t\ttest $A = $(git rev-parse --verify tag1^0)\n'> <'\t) &&\n'> <'\tget_needs $U >actual &&\n'> 
            <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)