Skip to content

Commit 4c05e5d

Browse files
committed
Merge pull request #305 from dscho/msysgit_issues_182
Allow `add -p` and `add -i` with a large number of files
2 parents 46b3a47 + 9cc0f08 commit 4c05e5d

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
@@ -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;

t/t3701-add-interactive.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,27 @@ test_expect_success 'add -p patch editing works with pathological context lines'
740740
test_cmp expected-2 actual
741741
'
742742

743+
test_expect_success EXPENSIVE 'add -i with a lot of files' '
744+
git reset --hard &&
745+
x160=0123456789012345678901234567890123456789 &&
746+
x160=$x160$x160$x160$x160 &&
747+
y= &&
748+
i=0 &&
749+
while test $i -le 200
750+
do
751+
name=$(printf "%s%03d" $x160 $i) &&
752+
echo $name >$name &&
753+
git add -N $name &&
754+
y="${y}y$LF" &&
755+
i=$(($i+1)) ||
756+
break
757+
done &&
758+
echo "$y" | git add -p -- . &&
759+
git diff --cached >staged &&
760+
test_line_count = 1407 staged &&
761+
git reset --hard
762+
'
763+
743764
test_expect_success 'show help from add--helper' '
744765
git reset --hard &&
745766
cat >expect <<-EOF &&

0 commit comments

Comments
 (0)