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 @@ -178,6 +178,24 @@ sub run_cmd_pipe {
178178 die " $^O does not support: @invalid \n" if @invalid ;
179179 my @args = map { m/ /o ? " \" $_ \" " : $_ } @_ ;
180180 return qx{ @args } ;
181+ } elsif (($^O eq ' MSWin32' || $^O eq ' msys' ) && (scalar @_ > 200) &&
182+ grep $_ eq ' --' , @_ ) {
183+ use File::Temp qw( tempfile) ;
184+ my ($fhargs , $filename ) =
185+ tempfile(' git-args-XXXXXX' , UNLINK => 1);
186+
187+ my $cmd = ' cat ' .$filename .' | xargs -0 -s 20000 ' ;
188+ while ($_ [0] ne ' --' ) {
189+ $cmd = $cmd . shift (@_ ) . ' ' ;
190+ }
191+
192+ shift (@_ );
193+ print $fhargs join (" \0 " , @_ );
194+ close ($fhargs );
195+
196+ my $fh = undef ;
197+ open ($fh , ' -|' , $cmd ) or die ;
198+ return <$fh >;
181199 } else {
182200 my $fh = undef ;
183201 open ($fh , ' -|' , @_ ) or die ;
Original file line number Diff line number Diff line change @@ -380,4 +380,25 @@ test_expect_success 'patch mode ignores unmerged entries' '
380380 test_cmp expected diff
381381'
382382
383+ test_expect_success EXPENSIVE ' add -i with a lot of files' '
384+ git reset --hard &&
385+ x160=0123456789012345678901234567890123456789 &&
386+ x160=$x160$x160$x160$x160 &&
387+ y= &&
388+ i=0 &&
389+ while test $i -le 200
390+ do
391+ name=$(printf "%s%03d" $x160 $i) &&
392+ echo $name >$name &&
393+ git add -N $name &&
394+ y="${y}y$LF" &&
395+ i=$(($i+1)) ||
396+ break
397+ done &&
398+ echo "$y" | git add -p -- . &&
399+ git diff --cached >staged &&
400+ test_line_count = 1407 staged &&
401+ git reset --hard
402+ '
403+
383404test_done
You can’t perform that action at this time.
0 commit comments