From 2b5e63d1b4a6f1b0ef58755a192ecb2d04e3569d Mon Sep 17 00:00:00 2001
From: Matthias Urlichs <smurf@smurf.noris.de>
Date: Mon, 10 Oct 2005 12:33:22 +0200
Subject: [PATCH] svn import: add eval()

Trying to downlaod a file that's really a subdirectory doesn't work too well.

Signed-Off-By: Matthias Urlichs <smurf@smurf.noris.de>
---
 git-svnimport.perl | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/git-svnimport.perl b/git-svnimport.perl
index 08645f7ebb..920b23e6cb 100755
--- a/git-svnimport.perl
+++ b/git-svnimport.perl
@@ -121,12 +121,15 @@ sub file {
 	my ($fh, $name) = tempfile('gitsvn.XXXXXX', 
 		    DIR => File::Spec->tmpdir(), UNLINK => 1);
 
-	$self->{'svn'}->get_file($path,$rev,$fh) or do {
+	print "... $rev $path ...\n" if $opt_v;
+	eval { $self->{'svn'}->get_file($path,$rev,$fh); };
+	if (defined $@ and $@ !~ /Attempted to get checksum/) {
 	    # retry
 	    $self->conn();
-		$self->{'svn'}->get_file($path,$rev,$fh)
-		    or die "$rev: No file $path at $rev\n";
+		eval { $self->{'svn'}->get_file($path,$rev,$fh); };
 	};
+	return () if defined $@ and $@ !~ /Attempted to get checksum/;
+	die $@ if $@;
 	close ($fh);
 
 	return ($name, $res);
@@ -308,7 +311,8 @@ sub get_file($$$) {
 	}
 
 	# now get it
-	my ($name, $res) = $svn->file($svnpath,$rev);
+	my ($name, $res) = eval { $svn->file($svnpath,$rev); };
+	return () unless defined $name;
 
 	open my $F, '-|', "git-hash-object -w $name"
 		or die "Cannot create object: $!\n";
@@ -343,7 +347,9 @@ sub commit {
 	my($author_name,$author_email,$dest);
 	my(@old,@new);
 
-	if ($author =~ /^(.*?)\s+<(.*)>$/) {
+	if (not defined $author) {
+		$author_name = $author_email = "unknown";
+	} elsif ($author =~ /^(.*?)\s+<(.*)>$/) {
 		($author_name, $author_email) = ($1, $2);
 	} else {
 		$author =~ s/^<(.*)>$/$1/;