-
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: Support multiple branch and tag paths in the svn repository.
This enables git-svn.perl to read multiple 'branches' and 'tags' entries in svn-remote config sections. The init and clone subcommands also support multiple --branches and --tags arguments. The branch (and tag) subcommand gets a new argument: --destination (or -d). This argument is required if there are multiple branches (or tags) entries configured for the remote Subversion repository. The argument's value specifies which branch (or tag) path to use to create the branch (or tag). The specified value must match the left side (without wildcards) of one of the branches (or tags) refspecs in the svn-remote's config. [ew: avoided explicit loop when combining globs with "push"] Signed-off-by: Marc Branchaud <marcnarc@xiplink.com> Acked-by: Eric Wong <normalperson@yhbt.net>
- Loading branch information
Marc Branchaud
authored and
Eric Wong
committed
Jun 25, 2009
1 parent
195643f
commit 6224406
Showing
2 changed files
with
170 additions
and
22 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2009 Marc Branchaud | ||
# | ||
|
||
test_description='git svn multiple branch and tag paths in the svn repo' | ||
. ./lib-git-svn.sh | ||
|
||
test_expect_success 'setup svnrepo' ' | ||
mkdir project \ | ||
project/trunk \ | ||
project/b_one \ | ||
project/b_two \ | ||
project/tags_A \ | ||
project/tags_B && | ||
echo 1 > project/trunk/a.file && | ||
svn import -m "$test_description" project "$svnrepo/project" && | ||
rm -rf project && | ||
svn cp -m "Branch 1" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/b_one/first" && | ||
svn cp -m "Tag 1" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/tags_A/1.0" && | ||
svn co "$svnrepo/project" svn_project && | ||
cd svn_project && | ||
. | ||
echo 2 > trunk/a.file && | ||
svn ci -m "Change 1" trunk/a.file && | ||
svn cp -m "Branch 2" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/b_one/second" && | ||
svn cp -m "Tag 2" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/tags_A/2.0" && | ||
echo 3 > trunk/a.file && | ||
svn ci -m "Change 2" trunk/a.file && | ||
svn cp -m "Branch 3" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/b_two/1" && | ||
svn cp -m "Tag 3" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/tags_A/3.0" && | ||
echo 4 > trunk/a.file && | ||
svn ci -m "Change 3" trunk/a.file && | ||
svn cp -m "Branch 4" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/b_two/2" && | ||
svn cp -m "Tag 4" "$svnrepo/project/trunk" \ | ||
"$svnrepo/project/tags_A/4.0" && | ||
svn up && | ||
echo 5 > b_one/first/a.file && | ||
svn ci -m "Change 4" b_one/first/a.file && | ||
svn cp -m "Tag 5" "$svnrepo/project/b_one/first" \ | ||
"$svnrepo/project/tags_B/v5" && | ||
echo 6 > b_one/second/a.file && | ||
svn ci -m "Change 5" b_one/second/a.file && | ||
svn cp -m "Tag 6" "$svnrepo/project/b_one/second" \ | ||
"$svnrepo/project/tags_B/v6" && | ||
echo 7 > b_two/1/a.file && | ||
svn ci -m "Change 6" b_two/1/a.file && | ||
svn cp -m "Tag 7" "$svnrepo/project/b_two/1" \ | ||
"$svnrepo/project/tags_B/v7" && | ||
echo 8 > b_two/2/a.file && | ||
svn ci -m "Change 7" b_two/2/a.file && | ||
svn cp -m "Tag 8" "$svnrepo/project/b_two/2" \ | ||
"$svnrepo/project/tags_B/v8" && | ||
cd .. | ||
' | ||
|
||
test_expect_success 'clone multiple branch and tag paths' ' | ||
git svn clone -T trunk \ | ||
-b b_one/* --branches b_two/* \ | ||
-t tags_A/* --tags tags_B \ | ||
"$svnrepo/project" git_project && | ||
cd git_project && | ||
git rev-parse refs/remotes/first && | ||
git rev-parse refs/remotes/second && | ||
git rev-parse refs/remotes/1 && | ||
git rev-parse refs/remotes/2 && | ||
git rev-parse refs/remotes/tags/1.0 && | ||
git rev-parse refs/remotes/tags/2.0 && | ||
git rev-parse refs/remotes/tags/3.0 && | ||
git rev-parse refs/remotes/tags/4.0 && | ||
git rev-parse refs/remotes/tags/v5 && | ||
git rev-parse refs/remotes/tags/v6 && | ||
git rev-parse refs/remotes/tags/v7 && | ||
git rev-parse refs/remotes/tags/v8 && | ||
cd .. | ||
' | ||
|
||
test_expect_success 'Multiple branch or tag paths require -d' ' | ||
cd git_project && | ||
test_must_fail git svn branch -m "No new branch" Nope && | ||
test_must_fail git svn tag -m "No new tag" Tagless && | ||
test_must_fail git rev-parse refs/remotes/Nope && | ||
test_must_fail git rev-parse refs/remotes/tags/Tagless && | ||
cd ../svn_project && | ||
svn up && | ||
test_must_fail test -d b_one/Nope && | ||
test_must_fail test -d b_two/Nope && | ||
test_must_fail test -d tags_A/Tagless && | ||
test_must_fail test -d tags_B/Tagless && | ||
cd .. | ||
' | ||
|
||
test_expect_success 'create new branches and tags' ' | ||
( cd git_project && git svn branch -m "New branch 1" -d project/b_one New1 ) && | ||
( cd svn_project && svn up && test -e b_one/New1/a.file ) && | ||
( cd git_project && git svn branch -m "New branch 2" -d project/b_two New2 ) && | ||
( cd svn_project && svn up && test -e b_two/New2/a.file ) && | ||
( cd git_project && git svn branch -t -m "New tag 1" -d project/tags_A Tag1 ) && | ||
( cd svn_project && svn up && test -e tags_A/Tag1/a.file ) | ||
( cd git_project && git svn tag -m "New tag 2" -d project/tags_B Tag2 ) && | ||
( cd svn_project && svn up && test -e tags_B/Tag2/a.file ) | ||
' | ||
|
||
test_done |