Skip to content

Commit d149cd6

Browse files
author
Git for Windows Build Agent
committed
Merge pull request #305 from dscho/msysgit_issues_182
Allow `add -p` and `add -i` with a large number of files
2 parents bfe1341 + 513783b commit d149cd6

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

git-add--interactive.perl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,24 @@ sub run_cmd_pipe {
179179
die "$^O does not support: @invalid\n" if @invalid;
180180
my @args = map { m/ /o ? "\"$_\"": $_ } @_;
181181
return qx{@args};
182+
} elsif (($^O eq 'MSWin32' || $^O eq 'msys') && (scalar @_ > 200) &&
183+
grep $_ eq '--', @_) {
184+
use File::Temp qw(tempfile);
185+
my ($fhargs, $filename) =
186+
tempfile('git-args-XXXXXX', UNLINK => 1);
187+
188+
my $cmd = 'cat '.$filename.' | xargs -0 -s 20000 ';
189+
while ($_[0] ne '--') {
190+
$cmd = $cmd . shift(@_) . ' ';
191+
}
192+
193+
shift(@_);
194+
print $fhargs join("\0", @_);
195+
close($fhargs);
196+
197+
my $fh = undef;
198+
open($fh, '-|', $cmd) or die;
199+
return <$fh>;
182200
} else {
183201
my $fh = undef;
184202
open($fh, '-|', @_) or die;

t/t3701-add-interactive.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
383404
test_done

0 commit comments

Comments
 (0)