File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -160,6 +160,24 @@ sub run_cmd_pipe {
160160 die " $^O does not support: @invalid \n" if @invalid ;
161161 my @args = map { m/ /o ? " \" $_ \" " : $_ } @_ ;
162162 return qx{ @args } ;
163+ } elsif (($^O eq ' MSWin32' || $^O eq ' msys' ) && (scalar @_ > 200) &&
164+ grep $_ eq ' --' , @_ ) {
165+ use File::Temp qw( tempfile) ;
166+ my ($fhargs , $filename ) =
167+ tempfile(' git-args-XXXXXX' , UNLINK => 1);
168+
169+ my $cmd = ' cat ' .$filename .' | xargs -0 -s 20000 ' ;
170+ while ($_ [0] ne ' --' ) {
171+ $cmd = $cmd . shift (@_ ) . ' ' ;
172+ }
173+
174+ shift (@_ );
175+ print $fhargs join (" \0 " , @_ );
176+ close ($fhargs );
177+
178+ my $fh = undef ;
179+ open ($fh , ' -|' , $cmd ) or die ;
180+ return <$fh >;
163181 } else {
164182 my $fh = undef ;
165183 open ($fh , ' -|' , @_ ) or die ;
Original file line number Diff line number Diff line change @@ -639,4 +639,25 @@ test_expect_success 'add -p patch editing works with pathological context lines'
639639 test_cmp expected-2 actual
640640'
641641
642+ test_expect_success EXPENSIVE ' add -i with a lot of files' '
643+ git reset --hard &&
644+ x160=0123456789012345678901234567890123456789 &&
645+ x160=$x160$x160$x160$x160 &&
646+ y= &&
647+ i=0 &&
648+ while test $i -le 200
649+ do
650+ name=$(printf "%s%03d" $x160 $i) &&
651+ echo $name >$name &&
652+ git add -N $name &&
653+ y="${y}y$LF" &&
654+ i=$(($i+1)) ||
655+ break
656+ done &&
657+ echo "$y" | git add -p -- . &&
658+ git diff --cached >staged &&
659+ test_line_count = 1407 staged &&
660+ git reset --hard
661+ '
662+
642663test_done
You can’t perform that action at this time.
0 commit comments