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:
parent
cb754fdf5a
commit
d9e2e12700
@ -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 $?;
|
||||||
|
Loading…
Reference in New Issue
Block a user