(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"ext::cmd remote \"connect\" helper">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m initial &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m second &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit --allow-empty -m third &&\n"> <"\ttest_tick &&\n"> <"\tgit tag -a -m \"tip three\" three &&\n"> <"\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit --allow-empty -m fourth\n">
        )
      }
    )
    (C {(test_expect_success)} {(clone)} 
      {
        (SQ <"\n"> <"\tcmd=$(echo \"echo >&2 ext::sh invoked && %S ..\" | sed -e \"s/ /% /g\") &&\n"> 
          <"\tgit clone \"ext::sh -c %S% .\" dst &&\n"> <"\tgit for-each-ref refs/heads/ refs/tags/ >expect &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\tgit config remote.origin.url \"ext::sh -c $cmd\" &&\n"> <"\t\tgit for-each-ref refs/heads/ refs/tags/\n"> <"\t) >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"update following tag">)} 
      {
        (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m fifth &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit tag -a -m \"tip five\" five &&\n"> <"\tgit for-each-ref refs/heads/ refs/tags/ >expect &&\n"> 
          <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\tgit pull &&\n"> <"\t\tgit for-each-ref refs/heads/ refs/tags/ >../actual\n"> 
          <"\t) &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"update backfilled tag">)} 
      {
        (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m sixth &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit tag -a -m \"tip two\" two three^1 &&\n"> 
          <"\tgit for-each-ref refs/heads/ refs/tags/ >expect &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\tgit pull &&\n"> 
          <"\t\tgit for-each-ref refs/heads/ refs/tags/ >../actual\n"> <"\t) &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"update backfilled tag without primary transfer">)} 
      {
        (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit tag -a -m \"tip one \" one two^1 &&\n"> 
          <"\tgit for-each-ref refs/heads/ refs/tags/ >expect &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\tgit pull &&\n"> 
          <"\t\tgit for-each-ref refs/heads/ refs/tags/ >../actual\n"> <"\t) &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"set up fake git-daemon">)} 
      {
        (SQ <"\n"> <"\tmkdir remote &&\n"> <"\tgit init --bare remote/one.git &&\n"> 
          <"\tmkdir remote/host &&\n"> <"\tgit init --bare remote/host/two.git &&\n"> <"\twrite_script fake-daemon <<-\\EOF &&\n"> 
          <"\tgit daemon --inetd \\\n"> <"\t\t--informative-errors \\\n"> <"\t\t--export-all \\\n"> 
          <"\t\t--base-path=\"$TRASH_DIRECTORY/remote\" \\\n"> <"\t\t--interpolated-path=\"$TRASH_DIRECTORY/remote/%H%D\" \\\n"> 
          <"\t\t\"$TRASH_DIRECTORY/remote\"\n"> <"\tEOF\n"> <"\texport TRASH_DIRECTORY &&\n"> <"\tPATH=$TRASH_DIRECTORY:$PATH\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"ext command can connect to git daemon (no vhost)">)} 
      {(SQ <"\n"> <"\trm -rf dst &&\n"> <"\tgit clone \"ext::fake-daemon %G/one.git\" dst\n">)}
    )
    (C {(test_expect_success)} {(SQ <"ext command can connect to git daemon (vhost)">)} 
      {
        (SQ <"\n"> <"\trm -rf dst &&\n"> <"\tgit clone \"ext::fake-daemon %G/two.git %Vhost\" dst\n">)
      }
    )
    (C {(test_done)})
  ]
)