X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-svnimport.perl;h=ee2940f4803955f2746baf3c78f64a67b4790cab;hb=1e3584053d56157549c01114f9550d1db7014a3e;hp=6e3a44a2bc9fbf170db45a7e390d6ac8ffbb6f02;hpb=92e802c6ccb96d1b5e8561b0a136d43d82253293;p=git.git diff --git a/git-svnimport.perl b/git-svnimport.perl index 6e3a44a2..ee2940f4 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -10,7 +10,6 @@ # The head revision is on branch "origin" by default. # You can change that with the '-o' option. -require 5.008; # for shell-safe open("-|",LIST) use strict; use warnings; use Getopt::Std; @@ -30,19 +29,19 @@ die "Need SVN:Core 1.2.1 or better" if $SVN::Core::VERSION lt "1.2.1"; $SIG{'PIPE'}="IGNORE"; $ENV{'TZ'}="UTC"; -our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,$opt_b,$opt_s,$opt_l,$opt_d,$opt_D); +our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,$opt_b,$opt_r,$opt_s,$opt_l,$opt_d,$opt_D); sub usage() { print STDERR <status_line." at $url\n"; } } else { - $name = $svn->file("/$svnpath",$rev); + $name = $svn->file("$svnpath",$rev); return undef unless defined $name; } - open my $F, '-|', "git-hash-object", "-w", $name + my $pid = open(my $F, '-|'); + die $! unless defined $pid; + if (!$pid) { + exec("git-hash-object", "-w", $name) or die "Cannot create object: $!\n"; + } my $sha = <$F>; chomp $sha; close $F; @@ -398,7 +401,12 @@ sub copy_path($$$$$$$$) { $srcpath =~ s#/*$#/#; } - open my $f,"-|","git-ls-tree","-r","-z",$gitrev,$srcpath; + my $pid = open my $f,'-|'; + die $! unless defined $pid; + if (!$pid) { + exec("git-ls-tree","-r","-z",$gitrev,$srcpath) + or die $!; + } local $/ = "\0"; while(<$f>) { chomp; @@ -546,23 +554,34 @@ sub commit { } } - if(@old) { - open my $F, "-|", "git-ls-files", "-z", @old or die $!; - @old = (); + while(@old) { + my @o1; + if(@old > 55) { + @o1 = splice(@old,0,50); + } else { + @o1 = @old; + @old = (); + } + my $pid = open my $F, "-|"; + die "$!" unless defined $pid; + if (!$pid) { + exec("git-ls-files", "-z", @o1) or die $!; + } + @o1 = (); local $/ = "\0"; while(<$F>) { chomp; - push(@old,$_); + push(@o1,$_); } close($F); - while(@old) { + while(@o1) { my @o2; - if(@old > 55) { - @o2 = splice(@old,0,50); + if(@o1 > 55) { + @o2 = splice(@o1,0,50); } else { - @o2 = @old; - @old = (); + @o2 = @o1; + @o1 = (); } system("git-update-index","--force-remove","--",@o2); die "Cannot remove files: $?\n" if $?; @@ -643,6 +662,7 @@ sub commit { $pr->reader(); $message =~ s/[\s\n]+\z//; + $message = "r$revision: $message" if $opt_r; print $pw "$message\n" or die "Error writing to git-commit-tree: $!\n";