(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"fetch/push involving ref namespaces">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit init original &&\n"> <"\t(\n"> <"\t\tcd original &&\n"> 
          <"\t\techo 0 >count &&\n"> <"\t\tgit add count &&\n"> <"\t\ttest_commit 0 &&\n"> <"\t\techo 1 >count &&\n"> 
          <"\t\tgit add count &&\n"> <"\t\ttest_commit 1 &&\n"> 
          <
"\t\tgit remote add pushee-namespaced \"ext::git --namespace=namespace %s ../pushee\" &&\n"
          > <"\t\tgit remote add pushee-unnamespaced ../pushee\n"> <"\t) &&\n"> 
          <"\tcommit0=$(cd original && git rev-parse HEAD^) &&\n"> <"\tcommit1=$(cd original && git rev-parse HEAD) &&\n"> <"\tgit init pushee &&\n"> 
          <"\tgit init puller\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pushing into a repository using a ref namespace">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd original &&\n"> <"\t\tgit push pushee-namespaced master &&\n"> 
          <"\t\tgit ls-remote pushee-namespaced >actual &&\n"> <"\t\tprintf \"$commit1\\trefs/heads/master\\n\" >expected &&\n"> 
          <"\t\ttest_cmp expected actual &&\n"> <"\t\tgit push pushee-namespaced --tags &&\n"> <"\t\tgit ls-remote pushee-namespaced >actual &&\n"> 
          <"\t\tprintf \"$commit0\\trefs/tags/0\\n\" >>expected &&\n"> <"\t\tprintf \"$commit1\\trefs/tags/1\\n\" >>expected &&\n"> <"\t\ttest_cmp expected actual &&\n"> 
          <"\t\t# Verify that the GIT_NAMESPACE environment variable works as well\n"> <"\t\tGIT_NAMESPACE=namespace git ls-remote \"ext::git %s ../pushee\" >actual &&\n"> 
          <"\t\ttest_cmp expected actual &&\n"> <"\t\t# Verify that --namespace overrides GIT_NAMESPACE\n"> 
          <"\t\tGIT_NAMESPACE=garbage git ls-remote pushee-namespaced >actual &&\n"> <"\t\ttest_cmp expected actual &&\n"> <"\t\t# Try a namespace with no content\n"> 
          <"\t\tgit ls-remote \"ext::git --namespace=garbage %s ../pushee\" >actual &&\n"> <"\t\ttest_cmp /dev/null actual &&\n"> <"\t\tgit ls-remote pushee-unnamespaced >actual &&\n"> 
          <
"\t\tsed -e \"s|refs/|refs/namespaces/namespace/refs/|\" expected >expected.unnamespaced &&\n"
          > <"\t\ttest_cmp expected.unnamespaced actual\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pulling from a repository using a ref namespace">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd puller &&\n"> 
          <
"\t\tgit remote add -f pushee-namespaced \"ext::git --namespace=namespace %s ../pushee\" &&\n"
          > <"\t\tgit for-each-ref refs/ >actual &&\n"> 
          <
"\t\tprintf \"$commit1 commit\\trefs/remotes/pushee-namespaced/master\\n\" >expected &&\n"
          > <"\t\tprintf \"$commit0 commit\\trefs/tags/0\\n\" >>expected &&\n"> 
          <"\t\tprintf \"$commit1 commit\\trefs/tags/1\\n\" >>expected &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"mirroring a repository using a ref namespace">)} 
      {
        (SQ <"\n"> <"\tgit clone --mirror pushee mirror &&\n"> <"\t(\n"> <"\t\tcd mirror &&\n"> 
          <"\t\tgit for-each-ref refs/ >actual &&\n"> <"\t\tprintf \"$commit1 commit\\trefs/namespaces/namespace/refs/heads/master\\n\" >expected &&\n"> 
          <
"\t\tprintf \"$commit0 commit\\trefs/namespaces/namespace/refs/tags/0\\n\" >>expected &&\n"
          > <"\t\tprintf \"$commit1 commit\\trefs/namespaces/namespace/refs/tags/1\\n\" >>expected &&\n"> 
          <"\t\ttest_cmp expected actual\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"hide namespaced refs with transfer.hideRefs">)} 
      {
        (SQ <"\n"> <"\tGIT_NAMESPACE=namespace \\\n"> 
          <"\t\tgit -C pushee -c transfer.hideRefs=refs/tags \\\n"> <"\t\tls-remote \"ext::git %s .\" >actual &&\n"> 
          <"\tprintf \"$commit1\\trefs/heads/master\\n\" >expected &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"check that transfer.hideRefs does not match unstripped refs">)} 
      {
        (SQ <"\n"> <"\tGIT_NAMESPACE=namespace \\\n"> 
          <"\t\tgit -C pushee -c transfer.hideRefs=refs/namespaces/namespace/refs/tags \\\n"> <"\t\tls-remote \"ext::git %s .\" >actual &&\n"> 
          <"\tprintf \"$commit1\\trefs/heads/master\\n\" >expected &&\n"> <"\tprintf \"$commit0\\trefs/tags/0\\n\" >>expected &&\n"> 
          <"\tprintf \"$commit1\\trefs/tags/1\\n\" >>expected &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"hide full refs with transfer.hideRefs">)} 
      {
        (SQ <"\n"> <"\tGIT_NAMESPACE=namespace \\\n"> 
          <"\t\tgit -C pushee -c transfer.hideRefs=\"^refs/namespaces/namespace/refs/tags\" \\\n"> <"\t\tls-remote \"ext::git %s .\" >actual &&\n"> 
          <"\tprintf \"$commit1\\trefs/heads/master\\n\" >expected &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"try to update a hidden ref">)} 
      {
        (SQ <"\n"> <"\ttest_config -C pushee transfer.hideRefs refs/heads/master &&\n"> 
          <"\ttest_must_fail git -C original push pushee-namespaced master\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"try to update a ref that is not hidden">)} 
      {
        (SQ <"\n"> 
          <
"\ttest_config -C pushee transfer.hideRefs refs/namespaces/namespace/refs/heads/master &&\n"
          > <"\tgit -C original push pushee-namespaced master\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"try to update a hidden full ref">)} 
      {
        (SQ <"\n"> 
          <
"\ttest_config -C pushee transfer.hideRefs \"^refs/namespaces/namespace/refs/heads/master\" &&\n"
          > <"\ttest_must_fail git -C original push pushee-namespaced master\n">
        )
      }
    )
    (C {(test_done)})
  ]
)