X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-svnimport.perl;h=45d77c5bae9c055641c416676c1d783c73fc28bb;hb=302ebfe52192fff9a2c1c612dff22325fd073acc;hp=e97f47059fda6cf058e43f2b77ff784ed2b5ee13;hpb=a16db4f472887a9050bf528bc7f0b94d6f7e8319;p=git.git diff --git a/git-svnimport.perl b/git-svnimport.perl index e97f4705..45d77c5b 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -25,7 +25,7 @@ use IPC::Open2; use SVN::Core; use SVN::Ra; -die "Need CVN:Core 1.2.1 or better" if $SVN::Core::VERSION lt "1.2.1"; +die "Need SVN:Core 1.2.1 or better" if $SVN::Core::VERSION lt "1.2.1"; $SIG{'PIPE'}="IGNORE"; $ENV{'TZ'}="UTC"; @@ -34,7 +34,7 @@ our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,$opt_b sub usage() { print STDERR <); + $last_branch = basename($last_branch); + close(F); unless($last_branch) { warn "Cannot read the last branch name: $! -- assuming 'master'\n"; $last_branch = "master"; @@ -281,7 +284,8 @@ sub revert_split_path($$) { $svnpath = "$branch_name/$branch/$path"; } - return $svnpath + $svnpath =~ s#/+$##; + return $svnpath; } sub get_file($$$) { @@ -373,6 +377,10 @@ sub copy_path($$$$$$$$) { my($newrev,$newbranch,$path,$oldpath,$rev,$node_kind,$new,$parents) = @_; my($srcbranch,$srcpath) = split_path($rev,$oldpath); + unless(defined $srcbranch) { + print "Path not found when copying from $oldpath @ $rev\n"; + return; + } my $therev = branch_rev($srcbranch, $rev); my $gitrev = $branches{$srcbranch}{$therev}; unless($gitrev) { @@ -727,15 +735,16 @@ sub commit_all { } while(++$current_rev <= $svn->{'maxrev'}) { + if (defined $opt_l) { + $opt_l--; + if ($opt_l < 0) { + last; + } + } my $pool=SVN::Pool->new; $svn->{'svn'}->get_log("/",$current_rev,$current_rev,1,1,1,\&_commit_all,$pool); $pool->clear; commit_all(); - if($opt_l and not --$opt_l) { - print STDERR "Stopping, because there is a memory leak (in the SVN library).\n"; - print STDERR "Please repeat this command; it will continue safely\n"; - last; - } } @@ -761,8 +770,7 @@ if($orig_branch) { print "DONE; creating $orig_branch branch\n" if $opt_v and (not defined $opt_l or $opt_l > 0); system("cp","$git_dir/refs/heads/$opt_o","$git_dir/refs/heads/master") unless -f "$git_dir/refs/heads/master"; - unlink("$git_dir/HEAD"); - symlink("refs/heads/$orig_branch","$git_dir/HEAD"); + system('git-update-ref', 'HEAD', "$orig_branch"); unless ($opt_i) { system('git checkout'); die "checkout failed: $?\n" if $?;