-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-svn: Allow deep branch names by supporting multi-globs
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>
- Loading branch information
Marcus Griep
authored and
Junio C Hamano
committed
Aug 8, 2008
1 parent
b47ddef
commit 570d35c
Showing
4 changed files
with
246 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |