(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
              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"))}
                )
              ]
              op_id: Op_DAmp
            )
          ]
          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)})
  ]
)