Browse Source
Some repositories use a deep branching strategy, such as: branches/1.0/1.0.rc1 branches/1.0/1.0.rc2 branches/1.0/1.0.rtm branches/1.0/1.0.gold Only allowing a single glob stiffles this. This change allows for a single glob 'set' to accept this deep branching strategy. The ref glob depth must match the branch glob depth. When using the -b or -t options for init or clone, this is automatically done. For example, using the above branches: svn-remote.svn.branches = branches/*/*:refs/remote/*/* gives the following branch names: 1.0/1.0.rc1 1.0/1.0.rc2 1.0/1.0.rtm 1.0/1.0.gold [ew: * removed unrelated line-wrapping changes * fixed line-wrapping in a few more places * removed trailing whitespace * fixed bashism in test * removed unnecessary httpd startup in test * changed copyright on tests to 2008 Marcus Griep * added executable permissions to new tests ] Signed-off-by: Marcus Griep <marcus@griep.us> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Marcus Griep
17 years ago
committed by
Junio C Hamano
4 changed files with 246 additions and 20 deletions
@ -0,0 +1,160 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright (c) 2007 Eric Wong |
||||||
|
test_description='git-svn globbing refspecs' |
||||||
|
. ./lib-git-svn.sh |
||||||
|
|
||||||
|
cat > expect.end <<EOF |
||||||
|
the end |
||||||
|
hi |
||||||
|
start a new branch |
||||||
|
initial |
||||||
|
EOF |
||||||
|
|
||||||
|
test_expect_success 'test refspec globbing' ' |
||||||
|
mkdir -p trunk/src/a trunk/src/b trunk/doc && |
||||||
|
echo "hello world" > trunk/src/a/readme && |
||||||
|
echo "goodbye world" > trunk/src/b/readme && |
||||||
|
svn import -m "initial" trunk "$svnrepo"/trunk && |
||||||
|
svn co "$svnrepo" tmp && |
||||||
|
( |
||||||
|
cd tmp && |
||||||
|
mkdir branches branches/v1 tags && |
||||||
|
svn add branches tags && |
||||||
|
svn cp trunk branches/v1/start && |
||||||
|
svn commit -m "start a new branch" && |
||||||
|
svn up && |
||||||
|
echo "hi" >> branches/v1/start/src/b/readme && |
||||||
|
poke branches/v1/start/src/b/readme && |
||||||
|
echo "hey" >> branches/v1/start/src/a/readme && |
||||||
|
poke branches/v1/start/src/a/readme && |
||||||
|
svn commit -m "hi" && |
||||||
|
svn up && |
||||||
|
svn cp branches/v1/start tags/end && |
||||||
|
echo "bye" >> tags/end/src/b/readme && |
||||||
|
poke tags/end/src/b/readme && |
||||||
|
echo "aye" >> tags/end/src/a/readme && |
||||||
|
poke tags/end/src/a/readme && |
||||||
|
svn commit -m "the end" && |
||||||
|
echo "byebye" >> tags/end/src/b/readme && |
||||||
|
poke tags/end/src/b/readme && |
||||||
|
svn 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/*/*/src/a:refs/remotes/branches/*/*" && |
||||||
|
git config --add svn-remote.svn.tags\ |
||||||
|
"tags/*/src/a:refs/remotes/tags/*" && |
||||||
|
git-svn multi-fetch && |
||||||
|
git log --pretty=oneline refs/remotes/tags/end | \ |
||||||
|
sed -e "s/^.\{41\}//" > output.end && |
||||||
|
test_cmp expect.end output.end && |
||||||
|
test "`git rev-parse refs/remotes/tags/end~1`" = \ |
||||||
|
"`git rev-parse refs/remotes/branches/v1/start`" && |
||||||
|
test "`git rev-parse refs/remotes/branches/v1/start~2`" = \ |
||||||
|
"`git rev-parse refs/remotes/trunk`" && |
||||||
|
test_must_fail git rev-parse refs/remotes/tags/end@3 |
||||||
|
' |
||||||
|
|
||||||
|
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 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/*/*:refs/remotes/two/branches/*/*" && |
||||||
|
git config --add svn-remote.two.tags \ |
||||||
|
"tags/*:refs/remotes/two/tags/*" && |
||||||
|
( |
||||||
|
cd tmp && |
||||||
|
echo "try try" >> tags/end/src/b/readme && |
||||||
|
poke tags/end/src/b/readme && |
||||||
|
svn commit -m "try to try" |
||||||
|
) && |
||||||
|
git-svn fetch two && |
||||||
|
test `git rev-list refs/remotes/two/tags/end | wc -l` -eq 6 && |
||||||
|
test `git rev-list refs/remotes/two/branches/v1/start | wc -l` -eq 3 && |
||||||
|
test `git rev-parse refs/remotes/two/branches/v1/start~2` = \ |
||||||
|
`git rev-parse refs/remotes/two/trunk` && |
||||||
|
test `git rev-parse refs/remotes/two/tags/end~3` = \ |
||||||
|
`git rev-parse refs/remotes/two/branches/v1/start` && |
||||||
|
git log --pretty=oneline refs/remotes/two/tags/end | \ |
||||||
|
sed -e "s/^.\{41\}//" > output.two && |
||||||
|
test_cmp expect.two output.two |
||||||
|
' |
||||||
|
cat > expect.four <<EOF |
||||||
|
adios |
||||||
|
adding more |
||||||
|
Changed 2 in v2/start |
||||||
|
Another versioned branch |
||||||
|
initial |
||||||
|
EOF |
||||||
|
|
||||||
|
test_expect_success 'test another branch' ' |
||||||
|
( |
||||||
|
cd tmp && |
||||||
|
mkdir branches/v2 && |
||||||
|
svn add branches/v2 && |
||||||
|
svn cp trunk branches/v2/start && |
||||||
|
svn commit -m "Another versioned branch" && |
||||||
|
svn up && |
||||||
|
echo "hello" >> branches/v2/start/src/b/readme && |
||||||
|
poke branches/v2/start/src/b/readme && |
||||||
|
echo "howdy" >> branches/v2/start/src/a/readme && |
||||||
|
poke branches/v2/start/src/a/readme && |
||||||
|
svn commit -m "Changed 2 in v2/start" && |
||||||
|
svn up && |
||||||
|
svn cp branches/v2/start tags/next && |
||||||
|
echo "bye" >> tags/next/src/b/readme && |
||||||
|
poke tags/next/src/b/readme && |
||||||
|
echo "aye" >> tags/next/src/a/readme && |
||||||
|
poke tags/next/src/a/readme && |
||||||
|
svn commit -m "adding more" && |
||||||
|
echo "byebye" >> tags/next/src/b/readme && |
||||||
|
poke tags/next/src/b/readme && |
||||||
|
svn commit -m "adios" |
||||||
|
) && |
||||||
|
git config --add svn-remote.four.url "$svnrepo" && |
||||||
|
git config --add svn-remote.four.fetch trunk:refs/remotes/four/trunk && |
||||||
|
git config --add svn-remote.four.branches \ |
||||||
|
"branches/*/*:refs/remotes/four/branches/*/*" && |
||||||
|
git config --add svn-remote.four.tags \ |
||||||
|
"tags/*:refs/remotes/four/tags/*" && |
||||||
|
git-svn fetch four && |
||||||
|
test `git rev-list refs/remotes/four/tags/next | wc -l` -eq 5 && |
||||||
|
test `git rev-list refs/remotes/four/branches/v2/start | wc -l` -eq 3 && |
||||||
|
test `git rev-parse refs/remotes/four/branches/v2/start~2` = \ |
||||||
|
`git rev-parse refs/remotes/four/trunk` && |
||||||
|
test `git rev-parse refs/remotes/four/tags/next~2` = \ |
||||||
|
`git rev-parse refs/remotes/four/branches/v2/start` && |
||||||
|
git log --pretty=oneline refs/remotes/four/tags/next | \ |
||||||
|
sed -e "s/^.\{41\}//" > output.four && |
||||||
|
test_cmp expect.four output.four |
||||||
|
' |
||||||
|
|
||||||
|
echo "Only one set of wildcard directories" \ |
||||||
|
"(e.g. '*' or '*/*/*') is supported: 'branches/*/t/*'" > expect.three |
||||||
|
echo "" >> expect.three |
||||||
|
|
||||||
|
test_expect_success 'test disallow multiple globs' ' |
||||||
|
git config --add svn-remote.three.url "$svnrepo" && |
||||||
|
git config --add svn-remote.three.fetch \ |
||||||
|
trunk:refs/remotes/three/trunk && |
||||||
|
git config --add svn-remote.three.branches \ |
||||||
|
"branches/*/t/*:refs/remotes/three/branches/*/*" && |
||||||
|
git config --add svn-remote.three.tags \ |
||||||
|
"tags/*:refs/remotes/three/tags/*" && |
||||||
|
( |
||||||
|
cd tmp && |
||||||
|
echo "try try" >> tags/end/src/b/readme && |
||||||
|
poke tags/end/src/b/readme && |
||||||
|
svn commit -m "try to try" |
||||||
|
) && |
||||||
|
test_must_fail git-svn fetch three 2> stderr.three && |
||||||
|
test_cmp expect.three stderr.three |
||||||
|
' |
||||||
|
|
||||||
|
test_done |
@ -0,0 +1,37 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright (c) 2008 Marcus Griep |
||||||
|
|
||||||
|
test_description='git-svn multi-glob branch names' |
||||||
|
. ./lib-git-svn.sh |
||||||
|
|
||||||
|
test_expect_success 'setup svnrepo' ' |
||||||
|
mkdir project project/trunk project/branches \ |
||||||
|
project/branches/v14.1 project/tags && |
||||||
|
echo foo > project/trunk/foo && |
||||||
|
svn import -m "$test_description" project "$svnrepo/project" && |
||||||
|
rm -rf project && |
||||||
|
svn cp -m "fun" "$svnrepo/project/trunk" \ |
||||||
|
"$svnrepo/project/branches/v14.1/beta" && |
||||||
|
svn cp -m "more fun!" "$svnrepo/project/branches/v14.1/beta" \ |
||||||
|
"$svnrepo/project/branches/v14.1/gold" |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success 'test clone with multi-glob in branch names' ' |
||||||
|
git svn clone -T trunk -b branches/*/* -t tags \ |
||||||
|
"$svnrepo/project" project && |
||||||
|
cd project && |
||||||
|
git rev-parse "refs/remotes/v14.1/beta" && |
||||||
|
git rev-parse "refs/remotes/v14.1/gold" && |
||||||
|
cd .. |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success 'test dcommit to multi-globbed branch' " |
||||||
|
cd project && |
||||||
|
git reset --hard 'refs/remotes/v14.1/gold' && |
||||||
|
echo hello >> foo && |
||||||
|
git commit -m 'hello' -- foo && |
||||||
|
git svn dcommit && |
||||||
|
cd .. |
||||||
|
" |
||||||
|
|
||||||
|
test_done |
Loading…
Reference in new issue