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 @@
@@ -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 @@
@@ -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