Re: [PATCH] git-svn: introduce --parents parameter for commands branch and tag
On 15.05.2013 04:35, Eric Wong wrote: +if (!eval{$ctx-ls($parent, 'HEAD', 0)}) { +mk_parent_dirs($ctx, $parent); +print Creating parent folder ${parent} ...\n; +$ctx-mkdir($parent) +unless $_dry_run; The newline is confusing, I prefer: $ctx-mkdir($parent) unless $_dry_run; In fact, this was a copy/paste from a few lines above print Copying ${src} at r${rev} to ${dst}...\n; $ctx-copy($src, $rev, $dst) unless $_dry_run; Howeve : if (!$_dry_run) { $ctx-mkdir($parent); } May be preferred, too (especially for the non-Perl-fluent) I am a non-Perl-fluent, as I come from the Java world with some knowledge of C and C++. But to be able to create the patch I had to gather some Perl knowledge, and by doing this, I learned enough to understand, that there is more than one way, ... Especially the constructs if (condition) foo(); vs foo() if (condition); and the same for unless. And since the dry_run is the exception in this case, I think unless is a valid choice -- and is used often in git-svn.perl. So I will stick to it, but remove the newline. +++ b/t/t9167-git-svn-cmd-branch-subproject.sh +test_expect_success 'initialize svnrepo' ' +mkdir import +( +(cd import +mkdir -p trunk/project branches tags +(cd trunk/project +echo foo foo +) Tabs for all indentation, and indent consistently for subshells: mkdir import ( cd import mkdir .. ( cd .. .. ) ) We use subshells + cd like this so it's easier to read/maintain. Again, this was a copy/paste from t9128-git-svn-cmd-branch.sh. So this file needs some cosmetics, too. And t9127... as well... Thanks again, looking forward to applying v2. I will send v2 soon. Tobias -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2] git-svn: introduce --parents parameter for commands branch and tag
This parameter is equivalent to the parameter --parents on svn cp commands and is useful for non-standard repository layouts. Signed-off-by: Tobias Schulte tobias.schu...@gliderpilot.de --- Documentation/git-svn.txt|5 git-svn.perl | 19 +++- t/t9167-git-svn-cmd-branch-subproject.sh | 48 ++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100755 t/t9167-git-svn-cmd-branch-subproject.sh diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index 58b6d54..842ff83 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -298,6 +298,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 + +--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':: Create a tag in the SVN repository. This is a shorthand for 'branch -t'. diff --git a/git-svn.perl b/git-svn.perl index ccabe06..d070de0 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -113,7 +113,7 @@ my ($_stdin, $_help, $_edit, $_template, $_shared, $_version, $_fetch_all, $_no_rebase, $_fetch_parent, $_before, $_after, - $_merge, $_strategy, $_preserve_merges, $_dry_run, $_local, + $_merge, $_strategy, $_preserve_merges, $_dry_run, $_parents, $_local, $_prefix, $_no_checkout, $_url, $_verbose, $_commit_url, $_tag, $_merge_info, $_interactive); @@ -203,6 +203,7 @@ my %cmd = ( { 'message|m=s' = \$_message, 'destination|d=s' = \$_branch_dest, 'dry-run|n' = \$_dry_run, + 'parents' = \$_parents, 'tag|t' = \$_tag, 'username=s' = \$Git::SVN::Prompt::_username, 'commit-url=s' = \$_commit_url } ], @@ -211,6 +212,7 @@ my %cmd = ( { 'message|m=s' = \$_message, 'destination|d=s' = \$_branch_dest, 'dry-run|n' = \$_dry_run, + 'parents' = \$_parents, 'username=s' = \$Git::SVN::Prompt::_username, 'commit-url=s' = \$_commit_url } ], 'set-tree' = [ \cmd_set_tree, @@ -1172,6 +1174,10 @@ sub cmd_branch { $ctx-ls($dst, 'HEAD', 0); } and die branch ${branch_name} already exists\n; + if ($_parents) { + mk_parent_dirs($ctx, $dst); + } + print Copying ${src} at r${rev} to ${dst}...\n; $ctx-copy($src, $rev, $dst) unless $_dry_run; @@ -1179,6 +1185,17 @@ sub cmd_branch { $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 { my $revision_or_hash = shift or die SVN or git revision required , as a command-line argument\n; diff --git a/t/t9167-git-svn-cmd-branch-subproject.sh b/t/t9167-git-svn-cmd-branch-subproject.sh new file mode 100755 index 000..53def87 --- /dev/null +++ b/t/t9167-git-svn-cmd-branch-subproject.sh @@ -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 -- 1.7.9.5 -- To unsubscribe from this list: send the line unsubscribe git in the body
[PATCH] git-svn: introduce --parents parameter for commands branch and tag
This parameter is equivalent to the parameter --parents on svn cp commands and is useful for non-standard repository layouts. Signed-off-by: Tobias Schulte tobias.schu...@gliderpilot.de --- Documentation/git-svn.txt|5 git-svn.perl | 22 +- t/t9167-git-svn-cmd-branch-subproject.sh | 46 ++ 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100755 t/t9167-git-svn-cmd-branch-subproject.sh diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index 58b6d54..4f2141d 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -298,6 +298,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 + +--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':: Create a tag in the SVN repository. This is a shorthand for 'branch -t'. diff --git a/git-svn.perl b/git-svn.perl index ccabe06..204313d 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -113,7 +113,7 @@ my ($_stdin, $_help, $_edit, $_template, $_shared, $_version, $_fetch_all, $_no_rebase, $_fetch_parent, $_before, $_after, - $_merge, $_strategy, $_preserve_merges, $_dry_run, $_local, + $_merge, $_strategy, $_preserve_merges, $_dry_run, $_parents, $_local, $_prefix, $_no_checkout, $_url, $_verbose, $_commit_url, $_tag, $_merge_info, $_interactive); @@ -203,6 +203,7 @@ my %cmd = ( { 'message|m=s' = \$_message, 'destination|d=s' = \$_branch_dest, 'dry-run|n' = \$_dry_run, + 'parents' = \$_parents, 'tag|t' = \$_tag, 'username=s' = \$Git::SVN::Prompt::_username, 'commit-url=s' = \$_commit_url } ], @@ -211,6 +212,7 @@ my %cmd = ( { 'message|m=s' = \$_message, 'destination|d=s' = \$_branch_dest, 'dry-run|n' = \$_dry_run, + 'parents' = \$_parents, 'username=s' = \$Git::SVN::Prompt::_username, 'commit-url=s' = \$_commit_url } ], 'set-tree' = [ \cmd_set_tree, @@ -1172,6 +1174,10 @@ sub cmd_branch { $ctx-ls($dst, 'HEAD', 0); } and die branch ${branch_name} already exists\n; + if ($_parents) { + mk_parent_dirs($ctx, $dst); + } + print Copying ${src} at r${rev} to ${dst}...\n; $ctx-copy($src, $rev, $dst) unless $_dry_run; @@ -1179,6 +1185,20 @@ sub cmd_branch { $gs-fetch_all; } +sub mk_parent_dirs { + my $ctx = shift; + my $parent = shift; + $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 { my $revision_or_hash = shift or die SVN or git revision required , as a command-line argument\n; diff --git a/t/t9167-git-svn-cmd-branch-subproject.sh b/t/t9167-git-svn-cmd-branch-subproject.sh new file mode 100755 index 000..9cb891b --- /dev/null +++ b/t/t9167-git-svn-cmd-branch-subproject.sh @@ -0,0 +1,46 @@ +#!/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 -- 1.7.9.5 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo