git-svnimport.perl: fix for 'arg list too long...'

This fixes 'arg list too long..' problem with git-ls-files.

Note that second arg list separation loop (with 'git-update-index') is
needed since git-ls-files arguments can be directories.

Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Sasha Khapyorsky 2006-02-01 17:53:31 +02:00 committed by Junio C Hamano
parent cb754fdf5a
commit d9e2e12700

View File

@ -546,23 +546,30 @@ sub commit {
} }
} }
if(@old) { while(@old) {
open my $F, "-|", "git-ls-files", "-z", @old or die $!; my @o1;
if(@old > 55) {
@o1 = splice(@old,0,50);
} else {
@o1 = @old;
@old = (); @old = ();
}
open my $F, "-|", "git-ls-files", "-z", @o1 or die $!;
@o1 = ();
local $/ = "\0"; local $/ = "\0";
while(<$F>) { while(<$F>) {
chomp; chomp;
push(@old,$_); push(@o1,$_);
} }
close($F); close($F);
while(@old) { while(@o1) {
my @o2; my @o2;
if(@old > 55) { if(@o1 > 55) {
@o2 = splice(@old,0,50); @o2 = splice(@o1,0,50);
} else { } else {
@o2 = @old; @o2 = @o1;
@old = (); @o1 = ();
} }
system("git-update-index","--force-remove","--",@o2); system("git-update-index","--force-remove","--",@o2);
die "Cannot remove files: $?\n" if $?; die "Cannot remove files: $?\n" if $?;