Skip to content

Commit

Permalink
Merge pull request #305 from dscho/msysgit_issues_182
Browse files Browse the repository at this point in the history
Allow `add -p` and `add -i` with a large number of files
  • Loading branch information
dscho committed Nov 7, 2015
2 parents 3f327e5 + 5fae085 commit 35b1673
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
18 changes: 18 additions & 0 deletions git-add--interactive.perl
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,24 @@ sub run_cmd_pipe {
die "$^O does not support: @invalid\n" if @invalid;
my @args = map { m/ /o ? "\"$_\"": $_ } @_;
return qx{@args};
} elsif (($^O eq 'MSWin32' || $^O eq 'msys') && (scalar @_ > 200) &&
grep $_ eq '--', @_) {
use File::Temp qw(tempfile);
my ($fhargs, $filename) =
tempfile('git-args-XXXXXX', UNLINK => 1);

my $cmd = 'cat '.$filename.' | xargs -0 -s 20000 ';
while ($_[0] ne '--') {
$cmd = $cmd . shift(@_) . ' ';
}

shift(@_);
print $fhargs join("\0", @_);
close($fhargs);

my $fh = undef;
open($fh, '-|', $cmd) or die;
return <$fh>;
} else {
my $fh = undef;
open($fh, '-|', @_) or die;
Expand Down
21 changes: 21 additions & 0 deletions t/t3701-add-interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -380,4 +380,25 @@ test_expect_success 'patch mode ignores unmerged entries' '
test_cmp expected diff
'

test_expect_success EXPENSIVE 'add -i with a lot of files' '
git reset --hard &&
x160=0123456789012345678901234567890123456789 &&
x160=$x160$x160$x160$x160 &&
y= &&
i=0 &&
while test $i -le 200
do
name=$(printf "%s%03d" $x160 $i) &&
echo $name >$name &&
git add -N $name &&
y="${y}y$LF" &&
i=$(($i+1)) ||
break
done &&
echo "$y" | git add -p -- . &&
git diff --cached >staged &&
test_line_count = 1407 staged &&
git reset --hard
'

test_done

0 comments on commit 35b1673

Please sign in to comment.