(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'fetch/push involving ref namespaces' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:19) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:20) (Token id:Id.Lit_Chars val:'\tgit init original &&\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:22) (Token id:Id.Lit_Chars val:'\t\tcd original &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\t\techo 0 >count &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\t\tgit add count &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit 0 &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\t\techo 1 >count &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\t\tgit add count &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\t\ttest_commit 1 &&\n' span_id:29) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit remote add pushee-namespaced "ext::git --namespace=namespace %s ../pushee" &&\n'
            span_id: 30
          ) (Token id:Id.Lit_Chars val:'\t\tgit remote add pushee-unnamespaced ../pushee\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tcommit0=$(cd original && git rev-parse HEAD^) &&\n' span_id:33) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit1=$(cd original && git rev-parse HEAD) &&\n'
            span_id: 34
          ) (Token id:Id.Lit_Chars val:'\tgit init pushee &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit init puller\n' span_id:36)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pushing into a repository using a ref namespace' span_id:43))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:47) (Token id:Id.Lit_Chars val:'\t(\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t\tcd original &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\t\tgit push pushee-namespaced master &&\n' span_id:50) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit ls-remote pushee-namespaced >actual &&\n'
            span_id: 51
          ) (Token id:Id.Lit_Chars val:'\t\tprintf "$commit1\\trefs/heads/master\\n" >expected &&\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\t\tgit push pushee-namespaced --tags &&\n' span_id:54) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit ls-remote pushee-namespaced >actual &&\n'
            span_id: 55
          ) (Token id:Id.Lit_Chars val:'\t\tprintf "$commit0\\trefs/tags/0\\n" >>expected &&\n' span_id:56) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tprintf "$commit1\\trefs/tags/1\\n" >>expected &&\n'
            span_id: 57
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual &&\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Verify that the GIT_NAMESPACE environment variable works as well\n'
            span_id: 59
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_NAMESPACE=namespace git ls-remote "ext::git %s ../pushee" >actual &&\n'
            span_id: 60
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual &&\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Verify that --namespace overrides GIT_NAMESPACE\n'
            span_id: 62
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_NAMESPACE=garbage git ls-remote pushee-namespaced >actual &&\n'
            span_id: 63
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual &&\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\t\t# Try a namespace with no content\n' span_id:65) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit ls-remote "ext::git --namespace=garbage %s ../pushee" >actual &&\n'
            span_id: 66
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /dev/null actual &&\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit ls-remote pushee-unnamespaced >actual &&\n'
            span_id: 68
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tsed -e "s|refs/|refs/namespaces/namespace/refs/|" expected >expected.unnamespaced &&\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected.unnamespaced actual\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:71)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pulling from a repository using a ref namespace' span_id:78))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:82) (Token id:Id.Lit_Chars val:'\t(\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t\tcd puller &&\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit remote add -f pushee-namespaced "ext::git --namespace=namespace %s ../pushee" &&\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\t\tgit for-each-ref refs/ >actual &&\n' span_id:86) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tprintf "$commit1 commit\\trefs/remotes/pushee-namespaced/master\\n" >expected &&\n'
            span_id: 87
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tprintf "$commit0 commit\\trefs/tags/0\\n" >>expected &&\n'
            span_id: 88
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tprintf "$commit1 commit\\trefs/tags/1\\n" >>expected &&\n'
            span_id: 89
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:91)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'mirroring a repository using a ref namespace' span_id:122))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\tgit clone --mirror pushee mirror &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t(\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\t\tcd mirror &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\tgit for-each-ref refs/ >actual &&\n' span_id:130) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tprintf "$commit1 commit\\trefs/namespaces/namespace/refs/heads/master\\n" >expected &&\n'
            span_id: 131
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tprintf "$commit0 commit\\trefs/namespaces/namespace/refs/tags/0\\n" >>expected &&\n'
            span_id: 132
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tprintf "$commit1 commit\\trefs/namespaces/namespace/refs/tags/1\\n" >>expected &&\n'
            span_id: 133
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:135)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'hide namespaced refs with transfer.hideRefs' span_id:142))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\tGIT_NAMESPACE=namespace \\\n' span_id:147) (Token id:Id.Lit_Chars val:'\t\tgit -C pushee -c transfer.hideRefs=refs/tags \\\n' span_id:148) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tls-remote "ext::git %s ." >actual &&\n'
            span_id: 149
          ) (Token id:Id.Lit_Chars val:'\tprintf "$commit1\\trefs/heads/master\\n" >expected &&\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:151)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check that transfer.hideRefs does not match unstripped refs'
            span_id: 158
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:162) 
          (Token id:Id.Lit_Chars val:'\tGIT_NAMESPACE=namespace \\\n' span_id:163) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit -C pushee -c transfer.hideRefs=refs/namespaces/namespace/refs/tags \\\n'
            span_id: 164
          ) (Token id:Id.Lit_Chars val:'\t\tls-remote "ext::git %s ." >actual &&\n' span_id:165) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "$commit1\\trefs/heads/master\\n" >expected &&\n'
            span_id: 166
          ) (Token id:Id.Lit_Chars val:'\tprintf "$commit0\\trefs/tags/0\\n" >>expected &&\n' span_id:167) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "$commit1\\trefs/tags/1\\n" >>expected &&\n'
            span_id: 168
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:169)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'hide full refs with transfer.hideRefs' span_id:176))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tGIT_NAMESPACE=namespace \\\n' span_id:181) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -C pushee -c transfer.hideRefs="^refs/namespaces/namespace/refs/tags" \\\n'
            span_id: 182
          ) (Token id:Id.Lit_Chars val:'\t\tls-remote "ext::git %s ." >actual &&\n' span_id:183) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "$commit1\\trefs/heads/master\\n" >expected &&\n'
            span_id: 184
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:185)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'try to update a hidden ref' span_id:192))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config -C pushee transfer.hideRefs refs/heads/master &&\n'
            span_id: 197
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -C original push pushee-namespaced master\n'
            span_id: 198
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'try to update a ref that is not hidden' span_id:205))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_config -C pushee transfer.hideRefs refs/namespaces/namespace/refs/heads/master &&\n'
            span_id: 210
          ) (Token id:Id.Lit_Chars val:'\tgit -C original push pushee-namespaced master\n' span_id:211)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'try to update a hidden full ref' span_id:218))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_config -C pushee transfer.hideRefs "^refs/namespaces/namespace/refs/heads/master" &&\n'
            span_id: 223
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -C original push pushee-namespaced master\n'
            span_id: 224
          )
        )
      }
    )
    (C {(test_done)})
  ]
)