Skip to content

Commit 2584706

Browse files
kkhellerdscho
authored andcommitted
Allow add -p and add -i with a large number of files
This fixes msysgit#182. Inspired by Pull Request 218 using code from @PhilipDavis. [jes: simplified code quite a bit] Signed-off-by: Kelly Heller <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent 787bfe4 commit 2584706

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

git-add--interactive.perl

+18
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,24 @@ sub run_cmd_pipe {
174174
die "$^O does not support: @invalid\n" if @invalid;
175175
my @args = map { m/ /o ? "\"$_\"": $_ } @_;
176176
return qx{@args};
177+
} elsif (($^O eq 'MSWin32' || $^O eq 'msys') && (scalar @_ > 200) &&
178+
grep $_ eq '--', @_) {
179+
use File::Temp qw(tempfile);
180+
my ($fhargs, $filename) =
181+
tempfile('git-args-XXXXXX', UNLINK => 1);
182+
183+
my $cmd = 'cat '.$filename.' | xargs -0 -s 20000 ';
184+
while ($_[0] ne '--') {
185+
$cmd = $cmd . shift(@_) . ' ';
186+
}
187+
188+
shift(@_);
189+
print $fhargs join("\0", @_);
190+
close($fhargs);
191+
192+
my $fh = undef;
193+
open($fh, '-|', $cmd) or die;
194+
return <$fh>;
177195
} else {
178196
my $fh = undef;
179197
open($fh, '-|', @_) or die;

0 commit comments

Comments
 (0)