Merge git://git.bogomips.org/git-svn
* git://git.bogomips.org/git-svn: git-svn: introduce --parents parameter for commands branch and tag git-svn: clarify explanation of --destination argument git-svn: multiple fetch/branches/tags keys are supported
This commit is contained in:
commit
9134a460e3
@ -271,13 +271,15 @@ first have already been pushed into SVN.
|
|||||||
Create a tag by using the tags_subdir instead of the branches_subdir
|
Create a tag by using the tags_subdir instead of the branches_subdir
|
||||||
specified during git svn init.
|
specified during git svn init.
|
||||||
|
|
||||||
-d;;
|
-d<path>;;
|
||||||
--destination;;
|
--destination=<path>;;
|
||||||
|
|
||||||
If more than one --branches (or --tags) option was given to the 'init'
|
If more than one --branches (or --tags) option was given to the 'init'
|
||||||
or 'clone' command, you must provide the location of the branch (or
|
or 'clone' command, you must provide the location of the branch (or
|
||||||
tag) you wish to create in the SVN repository. The value of this
|
tag) you wish to create in the SVN repository. <path> specifies which
|
||||||
option must match one of the paths specified by a --branches (or
|
path to use to create the branch or tag and should match the pattern
|
||||||
--tags) option. You can see these paths with the commands
|
on the left-hand side of one of the configured branches or tags
|
||||||
|
refspecs. You can see these refspecs with the commands
|
||||||
+
|
+
|
||||||
git config --get-all svn-remote.<name>.branches
|
git config --get-all svn-remote.<name>.branches
|
||||||
git config --get-all svn-remote.<name>.tags
|
git config --get-all svn-remote.<name>.tags
|
||||||
@ -298,6 +300,11 @@ where <name> is the name of the SVN repository as specified by the -R option to
|
|||||||
git config --get-all svn-remote.<name>.commiturl
|
git config --get-all svn-remote.<name>.commiturl
|
||||||
+
|
+
|
||||||
|
|
||||||
|
--parents;;
|
||||||
|
Create parent folders. This parameter is equivalent to the parameter
|
||||||
|
--parents on svn cp commands and is useful for non-standard repository
|
||||||
|
layouts.
|
||||||
|
|
||||||
'tag'::
|
'tag'::
|
||||||
Create a tag in the SVN repository. This is a shorthand for
|
Create a tag in the SVN repository. This is a shorthand for
|
||||||
'branch -t'.
|
'branch -t'.
|
||||||
@ -1032,6 +1039,25 @@ comma-separated list of names within braces. For example:
|
|||||||
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
|
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Multiple fetch, branches, and tags keys are supported:
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
[svn-remote "messy-repo"]
|
||||||
|
url = http://server.org/svn
|
||||||
|
fetch = trunk/project-a:refs/remotes/project-a/trunk
|
||||||
|
fetch = branches/demos/june-project-a-demo:refs/remotes/project-a/demos/june-demo
|
||||||
|
branches = branches/server/*:refs/remotes/project-a/branches/*
|
||||||
|
branches = branches/demos/2011/*:refs/remotes/project-a/2011-demos/*
|
||||||
|
tags = tags/server/*:refs/remotes/project-a/tags/*
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Creating a branch in such a configuration requires disambiguating which
|
||||||
|
location to use using the -d or --destination flag:
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
$ git svn branch -d branches/server release-2-3-0
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
Note that git-svn keeps track of the highest revision in which a branch
|
Note that git-svn keeps track of the highest revision in which a branch
|
||||||
or tag has appeared. If the subset of branches or tags is changed after
|
or tag has appeared. If the subset of branches or tags is changed after
|
||||||
fetching, then .git/svn/.metadata must be manually edited to remove (or
|
fetching, then .git/svn/.metadata must be manually edited to remove (or
|
||||||
|
19
git-svn.perl
19
git-svn.perl
@ -113,7 +113,7 @@ my ($_stdin, $_help, $_edit,
|
|||||||
$_template, $_shared,
|
$_template, $_shared,
|
||||||
$_version, $_fetch_all, $_no_rebase, $_fetch_parent,
|
$_version, $_fetch_all, $_no_rebase, $_fetch_parent,
|
||||||
$_before, $_after,
|
$_before, $_after,
|
||||||
$_merge, $_strategy, $_preserve_merges, $_dry_run, $_local,
|
$_merge, $_strategy, $_preserve_merges, $_dry_run, $_parents, $_local,
|
||||||
$_prefix, $_no_checkout, $_url, $_verbose,
|
$_prefix, $_no_checkout, $_url, $_verbose,
|
||||||
$_commit_url, $_tag, $_merge_info, $_interactive);
|
$_commit_url, $_tag, $_merge_info, $_interactive);
|
||||||
|
|
||||||
@ -203,6 +203,7 @@ my %cmd = (
|
|||||||
{ 'message|m=s' => \$_message,
|
{ 'message|m=s' => \$_message,
|
||||||
'destination|d=s' => \$_branch_dest,
|
'destination|d=s' => \$_branch_dest,
|
||||||
'dry-run|n' => \$_dry_run,
|
'dry-run|n' => \$_dry_run,
|
||||||
|
'parents' => \$_parents,
|
||||||
'tag|t' => \$_tag,
|
'tag|t' => \$_tag,
|
||||||
'username=s' => \$Git::SVN::Prompt::_username,
|
'username=s' => \$Git::SVN::Prompt::_username,
|
||||||
'commit-url=s' => \$_commit_url } ],
|
'commit-url=s' => \$_commit_url } ],
|
||||||
@ -211,6 +212,7 @@ my %cmd = (
|
|||||||
{ 'message|m=s' => \$_message,
|
{ 'message|m=s' => \$_message,
|
||||||
'destination|d=s' => \$_branch_dest,
|
'destination|d=s' => \$_branch_dest,
|
||||||
'dry-run|n' => \$_dry_run,
|
'dry-run|n' => \$_dry_run,
|
||||||
|
'parents' => \$_parents,
|
||||||
'username=s' => \$Git::SVN::Prompt::_username,
|
'username=s' => \$Git::SVN::Prompt::_username,
|
||||||
'commit-url=s' => \$_commit_url } ],
|
'commit-url=s' => \$_commit_url } ],
|
||||||
'set-tree' => [ \&cmd_set_tree,
|
'set-tree' => [ \&cmd_set_tree,
|
||||||
@ -1172,6 +1174,10 @@ sub cmd_branch {
|
|||||||
$ctx->ls($dst, 'HEAD', 0);
|
$ctx->ls($dst, 'HEAD', 0);
|
||||||
} and die "branch ${branch_name} already exists\n";
|
} and die "branch ${branch_name} already exists\n";
|
||||||
|
|
||||||
|
if ($_parents) {
|
||||||
|
mk_parent_dirs($ctx, $dst);
|
||||||
|
}
|
||||||
|
|
||||||
print "Copying ${src} at r${rev} to ${dst}...\n";
|
print "Copying ${src} at r${rev} to ${dst}...\n";
|
||||||
$ctx->copy($src, $rev, $dst)
|
$ctx->copy($src, $rev, $dst)
|
||||||
unless $_dry_run;
|
unless $_dry_run;
|
||||||
@ -1179,6 +1185,17 @@ sub cmd_branch {
|
|||||||
$gs->fetch_all;
|
$gs->fetch_all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub mk_parent_dirs {
|
||||||
|
my ($ctx, $parent) = @_;
|
||||||
|
$parent =~ s{/[^/]*$}{};
|
||||||
|
|
||||||
|
if (!eval{$ctx->ls($parent, 'HEAD', 0)}) {
|
||||||
|
mk_parent_dirs($ctx, $parent);
|
||||||
|
print "Creating parent folder ${parent} ...\n";
|
||||||
|
$ctx->mkdir($parent) unless $_dry_run;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub cmd_find_rev {
|
sub cmd_find_rev {
|
||||||
my $revision_or_hash = shift or die "SVN or git revision required ",
|
my $revision_or_hash = shift or die "SVN or git revision required ",
|
||||||
"as a command-line argument\n";
|
"as a command-line argument\n";
|
||||||
|
48
t/t9167-git-svn-cmd-branch-subproject.sh
Executable file
48
t/t9167-git-svn-cmd-branch-subproject.sh
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Tobias Schulte
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='git svn branch for subproject clones'
|
||||||
|
. ./lib-git-svn.sh
|
||||||
|
|
||||||
|
test_expect_success 'initialize svnrepo' '
|
||||||
|
mkdir import &&
|
||||||
|
(
|
||||||
|
cd import &&
|
||||||
|
mkdir -p trunk/project branches tags &&
|
||||||
|
(
|
||||||
|
cd trunk/project &&
|
||||||
|
echo foo > foo
|
||||||
|
) &&
|
||||||
|
svn_cmd import -m "import for git-svn" . "$svnrepo" >/dev/null
|
||||||
|
) &&
|
||||||
|
rm -rf import &&
|
||||||
|
svn_cmd co "$svnrepo"/trunk/project trunk/project &&
|
||||||
|
(
|
||||||
|
cd trunk/project &&
|
||||||
|
echo bar >> foo &&
|
||||||
|
svn_cmd ci -m "updated trunk"
|
||||||
|
) &&
|
||||||
|
rm -rf trunk
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'import into git' '
|
||||||
|
git svn init --trunk=trunk/project --branches=branches/*/project \
|
||||||
|
--tags=tags/*/project "$svnrepo" &&
|
||||||
|
git svn fetch &&
|
||||||
|
git checkout remotes/trunk
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git svn branch tests' '
|
||||||
|
test_must_fail git svn branch a &&
|
||||||
|
git svn branch --parents a &&
|
||||||
|
test_must_fail git svn branch -t tag1 &&
|
||||||
|
git svn branch --parents -t tag1 &&
|
||||||
|
test_must_fail git svn branch --tag tag2 &&
|
||||||
|
git svn branch --parents --tag tag2 &&
|
||||||
|
test_must_fail git svn tag tag3 &&
|
||||||
|
git svn tag --parents tag3
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user