Subject: [PATCH 1/3] Accept root <tree-ish> in 'git-svn commit-diff'

From: Sergey Yanovich <[email-masked]>
Date: Tue, 19 Jun 2007 09:54:35 +0300

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.

Signed-off-by: Sergey Yanovich <[email-masked]>
---
 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') {
+		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') {
 		} else {
 			croak "Error parsing $_\n";
 		}
-- 
1.5.2.1