Re: [PATCH 1/3] Accept root <tree-ish> in 'git-svn commit-diff'
From: Eric Wong <hidden>
Date: 2016-06-15 22:43:17
Sergey Yanovich [off-list ref] wrote:
Experiments with Subversion (my version is 1.4.2) show that it is not necessary to call 'svn import' before the first commit. Contrarily to the Subversion documentation, first commit may be done even when Subversion repository is at revision 0. This allow export the whole git branch to a Subversion repo using only 'git-svn commit-diff'. Before this patch, however, 'git-svn' had no means to operate on root commits.
Cool.
quoted hunk
Signed-off-by: Sergey Yanovich <redacted> --- git-svn.perl | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)diff --git a/git-svn.perl b/git-svn.perl index 50128d7..8ad291b 100755 --- a/git-svn.perl +++ b/git-svn.perl@@ -2572,7 +2572,12 @@ sub generate_diff { } push @diff_tree, '--find-copies-harder' if $_find_copies_harder; push @diff_tree, "-l$_rename_limit" if defined $_rename_limit; - push @diff_tree, $tree_a, $tree_b; + if ($tree_a eq '0000000000000000000000000000000000000000') {
You can make this more legible by using '0' x40 instead of repeating 40 '0' characters. Also, it might be a good idea to support --root directly for git-svn so the user won't have to type 40 zeroes in the command-line :)
quoted hunk
+ push @diff_tree, '--root'; + } else { + push @diff_tree, $tree_a; + } + push @diff_tree, $tree_b; my ($diff_fh, $ctx) = command_output_pipe(@diff_tree); local $/ = "\0"; my $state = 'meta';@@ -2606,6 +2611,8 @@ sub generate_diff { } $x->{file_b} = $_; $state = 'meta'; + } elsif ($state eq 'meta' && $_ eq $tree_b && + $tree_a eq '0000000000000000000000000000000000000000') {
Same here with '0' x40
} else {
croak "Error parsing $_\n";
}
--
1.5.2.1-- Eric Wong