#!/bin/sh global test_description := ''git svn globbing refspecs with prefixed globs'' source ./lib-git-svn.sh test_expect_success 'prepare test refspec prefixed globbing' ' cat >expect.end <trunk/src/a/readme && echo "goodbye world" >trunk/src/b/readme && svn_cmd import -m "initial" trunk "$svnrepo"/trunk && svn_cmd co "$svnrepo" tmp && ( cd tmp && mkdir branches tags && svn_cmd add branches tags && svn_cmd cp trunk branches/b_start && svn_cmd commit -m "start a new branch" && svn_cmd up && echo "hi" >>branches/b_start/src/b/readme && poke branches/b_start/src/b/readme && echo "hey" >>branches/b_start/src/a/readme && poke branches/b_start/src/a/readme && svn_cmd commit -m "hi" && svn_cmd up && svn_cmd cp branches/b_start tags/t_end && echo "bye" >>tags/t_end/src/b/readme && poke tags/t_end/src/b/readme && echo "aye" >>tags/t_end/src/a/readme && poke tags/t_end/src/a/readme && svn_cmd commit -m "the end" && echo "byebye" >>tags/t_end/src/b/readme && poke tags/t_end/src/b/readme && svn_cmd commit -m "nothing to see here" ) && git config --add svn-remote.svn.url "$svnrepo" && git config --add svn-remote.svn.fetch \ "trunk/src/a:refs/remotes/trunk" && git config --add svn-remote.svn.branches \ "branches/b_*/src/a:refs/remotes/branches/b_*" && git config --add svn-remote.svn.tags\ "tags/t_*/src/a:refs/remotes/tags/t_*" && git svn multi-fetch && git log --pretty=oneline refs/remotes/tags/t_end | \ sed -e "s/^.\{41\}//" >output.end && test_cmp expect.end output.end && test "$(git rev-parse refs/remotes/tags/t_end~1)" = \ "$(git rev-parse refs/remotes/branches/b_start)" && test "$(git rev-parse refs/remotes/branches/b_start~2)" = \ "$(git rev-parse refs/remotes/trunk)" && test_must_fail git rev-parse refs/remotes/tags/t_end@3 ' test_expect_success 'prepare test left-hand-side only prefixed globbing' ' echo try to try >expect.two && echo nothing to see here >>expect.two && cat expect.end >>expect.two ' test_expect_success 'test left-hand-side only prefixed globbing' ' git config --add svn-remote.two.url "$svnrepo" && git config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk && git config --add svn-remote.two.branches \ "branches/b_*:refs/remotes/two/branches/*" && git config --add svn-remote.two.tags \ "tags/t_*:refs/remotes/two/tags/*" && ( cd tmp && echo "try try" >>tags/t_end/src/b/readme && poke tags/t_end/src/b/readme && svn_cmd commit -m "try to try" ) && git svn fetch two && test $(git rev-list refs/remotes/two/tags/t_end | wc -l) -eq 6 && test $(git rev-list refs/remotes/two/branches/b_start | wc -l) -eq 3 && test $(git rev-parse refs/remotes/two/branches/b_start~2) = \ $(git rev-parse refs/remotes/two/trunk) && test $(git rev-parse refs/remotes/two/tags/t_end~3) = \ $(git rev-parse refs/remotes/two/branches/b_start) && git log --pretty=oneline refs/remotes/two/tags/t_end | \ sed -e "s/^.\{41\}//" >output.two && test_cmp expect.two output.two ' test_expect_success 'prepare test prefixed globs match just prefix' ' cat >expect.three <>branches/b_/src/a/readme && poke branches/b_/src/a/readme && svn_cmd commit -m "Branch commit to b_" && svn_cmd up && svn_cmd cp branches/b_ tags/t_ && echo "Tag commit to t_" >>tags/t_/src/a/readme && poke tags/t_/src/a/readme && svn_cmd commit -m "Tag commit to t_" && svn_cmd up ) && git svn fetch three && test $(git rev-list refs/remotes/three/branches/b_ | wc -l) -eq 2 && test $(git rev-list refs/remotes/three/tags/t_ | wc -l) -eq 3 && test $(git rev-parse refs/remotes/three/branches/b_~1) = \ $(git rev-parse refs/remotes/three/trunk) && test $(git rev-parse refs/remotes/three/tags/t_~1) = \ $(git rev-parse refs/remotes/three/branches/b_) && git log --pretty=oneline refs/remotes/three/tags/t_ | \ sed -e "s/^.\{41\}//" >output.three && test_cmp expect.three output.three ' test_expect_success 'prepare test disallow prefixed multi-globs' " cat >expect.four <>tags/t_end/src/b/readme && poke tags/t_end/src/b/readme && svn_cmd commit -m "try to try" ) && test_must_fail git svn fetch four 2>stderr.four && test_cmp expect.four stderr.four && git config --unset svn-remote.four.branches && git config --unset svn-remote.four.tags ' test_expect_success 'prepare test globbing in the middle of the word' ' cat >expect.five <>branches/abcde/src/a/readme && poke branches/b_/src/a/readme && svn_cmd commit -m "Branch commit to abcde" && svn_cmd up && svn_cmd cp branches/abcde tags/fghij && echo "Tag commit to fghij" >>tags/fghij/src/a/readme && poke tags/fghij/src/a/readme && svn_cmd commit -m "Tag commit to fghij" && svn_cmd up ) && git svn fetch five && test $(git rev-list refs/remotes/five/branches/abcde | wc -l) -eq 2 && test $(git rev-list refs/remotes/five/tags/fghij | wc -l) -eq 3 && test $(git rev-parse refs/remotes/five/branches/abcde~1) = \ $(git rev-parse refs/remotes/five/trunk) && test $(git rev-parse refs/remotes/five/tags/fghij~1) = \ $(git rev-parse refs/remotes/five/branches/abcde) && git log --pretty=oneline refs/remotes/five/tags/fghij | \ sed -e "s/^.\{41\}//" >output.five && test_cmp expect.five output.five ' test_expect_success 'prepare test disallow multiple asterisks in one word' " echo \"Only one '*' is allowed in a pattern: 'a*c*e'\" >expect.six && echo \"\" >>expect.six " test_expect_success 'test disallow multiple asterisks in one word' ' git config --add svn-remote.six.url "$svnrepo" && git config --add svn-remote.six.fetch \ trunk:refs/remotes/six/trunk && git config --add svn-remote.six.branches \ "branches/a*c*e:refs/remotes/six/branches/*" && git config --add svn-remote.six.tags \ "tags/f*h*j:refs/remotes/six/tags/*" && ( cd tmp && echo "try try" >>tags/fghij/src/b/readme && poke tags/fghij/src/b/readme && svn_cmd commit -m "try to try" ) && test_must_fail git svn fetch six 2>stderr.six && test_cmp expect.six stderr.six ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git svn globbing refspecs with prefixed globs">)} spids: [3] ) ] spids: [3] ) (C {(.)} {(./lib-git-svn.sh)}) (C {(test_expect_success)} {(SQ <"prepare test refspec prefixed globbing">)} { (SQ <"\n"> <"\tcat >expect.end < <"the end\n"> <"hi\n"> <"start a new branch\n"> <"initial\n"> <"EOF\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"test refspec prefixed globbing">)} { (SQ <"\n"> <"\tmkdir -p trunk/src/a trunk/src/b trunk/doc &&\n"> <"\techo \"hello world\" >trunk/src/a/readme &&\n"> <"\techo \"goodbye world\" >trunk/src/b/readme &&\n"> <"\tsvn_cmd import -m \"initial\" trunk \"$svnrepo\"/trunk &&\n"> <"\tsvn_cmd co \"$svnrepo\" tmp &&\n"> <"\t(\n"> <"\t\tcd tmp &&\n"> <"\t\tmkdir branches tags &&\n"> <"\t\tsvn_cmd add branches tags &&\n"> <"\t\tsvn_cmd cp trunk branches/b_start &&\n"> <"\t\tsvn_cmd commit -m \"start a new branch\" &&\n"> <"\t\tsvn_cmd up &&\n"> <"\t\techo \"hi\" >>branches/b_start/src/b/readme &&\n"> <"\t\tpoke branches/b_start/src/b/readme &&\n"> <"\t\techo \"hey\" >>branches/b_start/src/a/readme &&\n"> <"\t\tpoke branches/b_start/src/a/readme &&\n"> <"\t\tsvn_cmd commit -m \"hi\" &&\n"> <"\t\tsvn_cmd up &&\n"> <"\t\tsvn_cmd cp branches/b_start tags/t_end &&\n"> <"\t\techo \"bye\" >>tags/t_end/src/b/readme &&\n"> <"\t\tpoke tags/t_end/src/b/readme &&\n"> <"\t\techo \"aye\" >>tags/t_end/src/a/readme &&\n"> <"\t\tpoke tags/t_end/src/a/readme &&\n"> <"\t\tsvn_cmd commit -m \"the end\" &&\n"> <"\t\techo \"byebye\" >>tags/t_end/src/b/readme &&\n"> <"\t\tpoke tags/t_end/src/b/readme &&\n"> <"\t\tsvn_cmd commit -m \"nothing to see here\"\n"> <"\t) &&\n"> <"\tgit config --add svn-remote.svn.url \"$svnrepo\" &&\n"> <"\tgit config --add svn-remote.svn.fetch \\\n"> <"\t\t\t \"trunk/src/a:refs/remotes/trunk\" &&\n"> <"\tgit config --add svn-remote.svn.branches \\\n"> <"\t\t\t \"branches/b_*/src/a:refs/remotes/branches/b_*\" &&\n"> <"\tgit config --add svn-remote.svn.tags\\\n"> <"\t\t\t \"tags/t_*/src/a:refs/remotes/tags/t_*\" &&\n"> <"\tgit svn multi-fetch &&\n"> <"\tgit log --pretty=oneline refs/remotes/tags/t_end | \\\n"> <"\t sed -e \"s/^.\\{41\\}//\" >output.end &&\n"> <"\ttest_cmp expect.end output.end &&\n"> <"\ttest \"$(git rev-parse refs/remotes/tags/t_end~1)\" = \\\n"> <"\t\t\"$(git rev-parse refs/remotes/branches/b_start)\" &&\n"> <"\ttest \"$(git rev-parse refs/remotes/branches/b_start~2)\" = \\\n"> <"\t\t\"$(git rev-parse refs/remotes/trunk)\" &&\n"> <"\ttest_must_fail git rev-parse refs/remotes/tags/t_end@3\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"prepare test left-hand-side only prefixed globbing">)} { (SQ <"\n"> <"\techo try to try >expect.two &&\n"> <"\techo nothing to see here >>expect.two &&\n"> <"\tcat expect.end >>expect.two\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"test left-hand-side only prefixed globbing">)} { (SQ <"\n"> <"\tgit config --add svn-remote.two.url \"$svnrepo\" &&\n"> <"\tgit config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk &&\n"> <"\tgit config --add svn-remote.two.branches \\\n"> <"\t\t\t \"branches/b_*:refs/remotes/two/branches/*\" &&\n"> <"\tgit config --add svn-remote.two.tags \\\n"> <"\t\t\t \"tags/t_*:refs/remotes/two/tags/*\" &&\n"> <"\t(\n"> <"\t\tcd tmp &&\n"> <"\t\techo \"try try\" >>tags/t_end/src/b/readme &&\n"> <"\t\tpoke tags/t_end/src/b/readme &&\n"> <"\t\tsvn_cmd commit -m \"try to try\"\n"> <"\t) &&\n"> <"\tgit svn fetch two &&\n"> <"\ttest $(git rev-list refs/remotes/two/tags/t_end | wc -l) -eq 6 &&\n"> <"\ttest $(git rev-list refs/remotes/two/branches/b_start | wc -l) -eq 3 &&\n"> <"\ttest $(git rev-parse refs/remotes/two/branches/b_start~2) = \\\n"> <"\t $(git rev-parse refs/remotes/two/trunk) &&\n"> <"\ttest $(git rev-parse refs/remotes/two/tags/t_end~3) = \\\n"> <"\t $(git rev-parse refs/remotes/two/branches/b_start) &&\n"> <"\tgit log --pretty=oneline refs/remotes/two/tags/t_end | \\\n"> <"\t sed -e \"s/^.\\{41\\}//\" >output.two &&\n"> <"\ttest_cmp expect.two output.two\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"prepare test prefixed globs match just prefix">)} { (SQ <"\n"> <"\tcat >expect.three < <"Tag commit to t_\n"> <"Branch commit to b_\n"> <"initial\n"> <"EOF\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"test prefixed globs match just prefix">)} { (SQ <"\n"> <"\tgit config --add svn-remote.three.url \"$svnrepo\" &&\n"> <"\tgit config --add svn-remote.three.fetch \\\n"> <"\t\t\t trunk:refs/remotes/three/trunk &&\n"> <"\tgit config --add svn-remote.three.branches \\\n"> <"\t\t\t \"branches/b_*:refs/remotes/three/branches/*\" &&\n"> <"\tgit config --add svn-remote.three.tags \\\n"> <"\t\t\t \"tags/t_*:refs/remotes/three/tags/*\" &&\n"> <"\t(\n"> <"\t\tcd tmp &&\n"> <"\t\tsvn_cmd cp trunk branches/b_ &&\n"> <"\t\techo \"Branch commit to b_\" >>branches/b_/src/a/readme &&\n"> <"\t\tpoke branches/b_/src/a/readme &&\n"> <"\t\tsvn_cmd commit -m \"Branch commit to b_\" &&\n"> <"\t\tsvn_cmd up && svn_cmd cp branches/b_ tags/t_ &&\n"> <"\t\techo \"Tag commit to t_\" >>tags/t_/src/a/readme &&\n"> <"\t\tpoke tags/t_/src/a/readme &&\n"> <"\t\tsvn_cmd commit -m \"Tag commit to t_\" &&\n"> <"\t\tsvn_cmd up\n"> <"\t) &&\n"> <"\tgit svn fetch three &&\n"> <"\ttest $(git rev-list refs/remotes/three/branches/b_ | wc -l) -eq 2 &&\n"> <"\ttest $(git rev-list refs/remotes/three/tags/t_ | wc -l) -eq 3 &&\n"> <"\ttest $(git rev-parse refs/remotes/three/branches/b_~1) = \\\n"> <"\t $(git rev-parse refs/remotes/three/trunk) &&\n"> <"\ttest $(git rev-parse refs/remotes/three/tags/t_~1) = \\\n"> <"\t $(git rev-parse refs/remotes/three/branches/b_) &&\n"> <"\tgit log --pretty=oneline refs/remotes/three/tags/t_ | \\\n"> <"\t sed -e \"s/^.\\{41\\}//\" >output.three &&\n"> <"\ttest_cmp expect.three output.three\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"prepare test disallow prefixed multi-globs">)} { (DQ ("\n") ("cat >expect.four <)} { (SQ <"\n"> <"\tgit config --add svn-remote.four.url \"$svnrepo\" &&\n"> <"\tgit config --add svn-remote.four.fetch \\\n"> <"\t\t\t trunk:refs/remotes/four/trunk &&\n"> <"\tgit config --add svn-remote.four.branches \\\n"> <"\t\t\t \"branches/b_*/t/*:refs/remotes/four/branches/*\" &&\n"> <"\tgit config --add svn-remote.four.tags \\\n"> <"\t\t\t \"tags/t_*/*:refs/remotes/four/tags/*\" &&\n"> <"\t(\n"> <"\t\tcd tmp &&\n"> <"\t\techo \"try try\" >>tags/t_end/src/b/readme &&\n"> <"\t\tpoke tags/t_end/src/b/readme &&\n"> <"\t\tsvn_cmd commit -m \"try to try\"\n"> <"\t) &&\n"> <"\ttest_must_fail git svn fetch four 2>stderr.four &&\n"> <"\ttest_cmp expect.four stderr.four &&\n"> <"\tgit config --unset svn-remote.four.branches &&\n"> <"\tgit config --unset svn-remote.four.tags\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"prepare test globbing in the middle of the word">)} { (SQ <"\n"> <"\tcat >expect.five < <"Tag commit to fghij\n"> <"Branch commit to abcde\n"> <"initial\n"> <"EOF\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"test globbing in the middle of the word">)} { (SQ <"\n"> <"\tgit config --add svn-remote.five.url \"$svnrepo\" &&\n"> <"\tgit config --add svn-remote.five.fetch \\\n"> <"\t\t\t trunk:refs/remotes/five/trunk &&\n"> <"\tgit config --add svn-remote.five.branches \\\n"> <"\t\t\t \"branches/a*e:refs/remotes/five/branches/*\" &&\n"> <"\tgit config --add svn-remote.five.tags \\\n"> <"\t\t\t \"tags/f*j:refs/remotes/five/tags/*\" &&\n"> <"\t(\n"> <"\t\tcd tmp &&\n"> <"\t\tsvn_cmd cp trunk branches/abcde &&\n"> <"\t\techo \"Branch commit to abcde\" >>branches/abcde/src/a/readme &&\n"> <"\t\tpoke branches/b_/src/a/readme &&\n"> <"\t\tsvn_cmd commit -m \"Branch commit to abcde\" &&\n"> <"\t\tsvn_cmd up &&\n"> <"\t\tsvn_cmd cp branches/abcde tags/fghij &&\n"> <"\t\techo \"Tag commit to fghij\" >>tags/fghij/src/a/readme &&\n"> <"\t\tpoke tags/fghij/src/a/readme &&\n"> <"\t\tsvn_cmd commit -m \"Tag commit to fghij\" &&\n"> <"\t\tsvn_cmd up\n"> <"\t) &&\n"> <"\tgit svn fetch five &&\n"> <"\ttest $(git rev-list refs/remotes/five/branches/abcde | wc -l) -eq 2 &&\n"> <"\ttest $(git rev-list refs/remotes/five/tags/fghij | wc -l) -eq 3 &&\n"> <"\ttest $(git rev-parse refs/remotes/five/branches/abcde~1) = \\\n"> <"\t $(git rev-parse refs/remotes/five/trunk) &&\n"> <"\ttest $(git rev-parse refs/remotes/five/tags/fghij~1) = \\\n"> <"\t $(git rev-parse refs/remotes/five/branches/abcde) &&\n"> <"\tgit log --pretty=oneline refs/remotes/five/tags/fghij | \\\n"> <"\t sed -e \"s/^.\\{41\\}//\" >output.five &&\n"> <"\ttest_cmp expect.five output.five\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"prepare test disallow multiple asterisks in one word">)} { (DQ ("\n") ("\techo ") (EscapedLiteralPart token:) ("Only one '*' is allowed in a pattern: 'a*c*e'") (EscapedLiteralPart token:) (" >expect.six &&\n") ("\techo ") (EscapedLiteralPart token:) (EscapedLiteralPart token:) (" >>expect.six\n") ("\t") ) } ) (C {(test_expect_success)} {(SQ <"test disallow multiple asterisks in one word">)} { (SQ <"\n"> <"\tgit config --add svn-remote.six.url \"$svnrepo\" &&\n"> <"\tgit config --add svn-remote.six.fetch \\\n"> <"\t\t\t trunk:refs/remotes/six/trunk &&\n"> <"\tgit config --add svn-remote.six.branches \\\n"> <"\t\t\t \"branches/a*c*e:refs/remotes/six/branches/*\" &&\n"> <"\tgit config --add svn-remote.six.tags \\\n"> <"\t\t\t \"tags/f*h*j:refs/remotes/six/tags/*\" &&\n"> <"\t(\n"> <"\t\tcd tmp &&\n"> <"\t\techo \"try try\" >>tags/fghij/src/b/readme &&\n"> <"\t\tpoke tags/fghij/src/b/readme &&\n"> <"\t\tsvn_cmd commit -m \"try to try\"\n"> <"\t) &&\n"> <"\ttest_must_fail git svn fetch six 2>stderr.six &&\n"> <"\ttest_cmp expect.six stderr.six\n"> <"\t"> ) } ) (C {(test_done)}) ] )