(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"test refspec written by clone-command">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <"\n"> <"\t# Make two branches, \"master\" and \"side\"\n"> <"\techo one >file &&\n"> 
          <"\tgit add file &&\n"> <"\tgit commit -m one &&\n"> <"\techo two >file &&\n"> <"\tgit commit -a -m two &&\n"> 
          <"\tgit tag two &&\n"> <"\techo three >file &&\n"> <"\tgit commit -a -m three &&\n"> <"\tgit checkout -b side &&\n"> 
          <"\techo four >file &&\n"> <"\tgit commit -a -m four &&\n"> <"\tgit checkout master &&\n"> <"\n"> <"\t# default clone\n"> 
          <"\tgit clone . dir_all &&\n"> <"\n"> <"\t# default --single that follows HEAD=master\n"> 
          <"\tgit clone --single-branch . dir_master &&\n"> <"\n"> <"\t# default --single that follows HEAD=side\n"> <"\tgit checkout side &&\n"> 
          <"\tgit clone --single-branch . dir_side &&\n"> <"\n"> <"\t# explicit --single that follows side\n"> <"\tgit checkout master &&\n"> 
          <"\tgit clone --single-branch --branch side . dir_side2 &&\n"> <"\n"> <"\t# default --single with --mirror\n"> 
          <"\tgit clone --single-branch --mirror . dir_mirror &&\n"> <"\n"> <"\t# default --single with --branch and --mirror\n"> 
          <"\tgit clone --single-branch --mirror --branch side . dir_mirror_side &&\n"> <"\n"> <"\t# --single that does not know what branch to follow\n"> <"\tgit checkout two^ &&\n"> 
          <"\tgit clone --single-branch . dir_detached &&\n"> <"\n"> <"\t# explicit --single with tag\n"> <"\tgit clone --single-branch --branch two . dir_tag &&\n"> 
          <"\n"> <"\t# advance both \"master\" and \"side\" branches\n"> <"\tgit checkout side &&\n"> 
          <"\techo five >file &&\n"> <"\tgit commit -a -m five &&\n"> <"\tgit checkout master &&\n"> <"\techo six >file &&\n"> 
          <"\tgit commit -a -m six &&\n"> <"\n"> <"\t# update tag\n"> <"\tgit tag -d two && git tag two\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"by default all branches will be kept updated">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_all && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/remotes/origin |\n"> <"\t\tsed -e \"/HEAD$/d\" \\\n"> <"\t\t    -e \"s|/remotes/origin/|/heads/|\" >../actual\n"> 
          <"\t) &&\n"> <"\t# follow both master and side\n"> <"\tgit for-each-ref refs/heads >expect &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"by default no tags will be kept updated">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_all && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/tags >../actual\n"> <"\t) &&\n"> <"\tgit for-each-ref refs/tags >expect &&\n"> 
          <"\ttest_must_fail test_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--single-branch while HEAD pointing at master">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_master && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/remotes/origin |\n"> <"\t\tsed -e \"/HEAD$/d\" \\\n"> <"\t\t    -e \"s|/remotes/origin/|/heads/|\" >../actual\n"> 
          <"\t) &&\n"> <"\t# only follow master\n"> <"\tgit for-each-ref refs/heads/master >expect &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--single-branch while HEAD pointing at side">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_side && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/remotes/origin |\n"> <"\t\tsed -e \"/HEAD$/d\" \\\n"> <"\t\t    -e \"s|/remotes/origin/|/heads/|\" >../actual\n"> 
          <"\t) &&\n"> <"\t# only follow side\n"> <"\tgit for-each-ref refs/heads/side >expect &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--single-branch with explicit --branch side">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_side2 && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/remotes/origin |\n"> <"\t\tsed -e \"/HEAD$/d\" \\\n"> <"\t\t    -e \"s|/remotes/origin/|/heads/|\" >../actual\n"> 
          <"\t) &&\n"> <"\t# only follow side\n"> <"\tgit for-each-ref refs/heads/side >expect &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <"--single-branch with explicit --branch with tag fetches updated tag">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_tag && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/tags >../actual\n"> <"\t) &&\n"> <"\tgit for-each-ref refs/tags >expect &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--single-branch with --mirror">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_mirror && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs > ../actual\n"> <"\t) &&\n"> <"\tgit for-each-ref refs >expect &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--single-branch with explicit --branch and --mirror">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_mirror_side && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs > ../actual\n"> <"\t) &&\n"> <"\tgit for-each-ref refs >expect &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"--single-branch with detached">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd dir_detached && git fetch &&\n"> 
          <"\t\tgit for-each-ref refs/remotes/origin |\n"> <"\t\tsed -e \"/HEAD$/d\" \\\n"> <"\t\t    -e \"s|/remotes/origin/|/heads/|\" >../actual\n"> 
          <"\t) &&\n"> <"\t# nothing\n"> <"\t>expect &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_done)})
  ]
)