(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)}) ] )