(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'test automatic tag following'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(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'>
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:U) op:Equal rhs:{(UPLOAD_LOG)} spids:[67])]
      spids: [67]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:UPATH)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [72 74]
                ) (/) ($ VSub_Name '$U')
              )
            }
          spids: [70]
        )
      ]
      spids: [70]
    )
    (C {(test_expect_success)} {(SQ <'setup expect'>)} 
      {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $A\n'> <'EOF\n'>)}
    )
    (FuncDef
      name: get_needs
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-s)} {(DQ ($ VSub_Number '$1'))})
                (C {(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 ($ VSub_Number '$1'))}
                )
              ]
            )
          ]
          spids: [99]
        )
      spids: [94 98]
    )
    (C {(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'>
        )
      }
    )
    (C {(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'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup expect'>)} 
      {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $C\n'> <'want $T\n'> <'EOF\n'>)}
    )
    (C {(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'>
        )
      }
    )
    (C {(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'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup expect'>)} 
      {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $B\n'> <'want $S\n'> <'EOF\n'>)}
    )
    (C {(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'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup expect'>)} 
      {(SQ <'\n'> <'cat - <<EOF >expect\n'> <'want $B\n'> <'want $S\n'> <'EOF\n'>)}
    )
    (C {(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'>
        )
      }
    )
    (C {(test_done)})
  ]
)