зеркало из https://github.com/microsoft/git.git
cvsimport: introduce _fetchfile() method and used a 1M buffer to read()
File retrieval from the socket is now moved to _fetchfile() and we now cap reads at 1MB. This should limit the memory growth of the cvsimport process. Signed-off-by: Martin Langhoff <martin@catalyst.net.nz> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
e73aefe4fd
Коммит
55cad84299
|
@ -315,15 +315,7 @@ sub _line {
|
|||
chomp $cnt;
|
||||
die "Duh: Filesize $cnt" if $cnt !~ /^\d+$/;
|
||||
$line="";
|
||||
$res=0;
|
||||
while($cnt) {
|
||||
my $buf;
|
||||
my $num = $self->{'socketi'}->read($buf,$cnt);
|
||||
die "Server: Filesize $cnt: $num: $!\n" if not defined $num or $num<=0;
|
||||
print $fh $buf;
|
||||
$res += $num;
|
||||
$cnt -= $num;
|
||||
}
|
||||
$res = $self->_fetchfile($fh, $cnt);
|
||||
} elsif($line =~ s/^ //) {
|
||||
print $fh $line;
|
||||
$res += length($line);
|
||||
|
@ -335,14 +327,7 @@ sub _line {
|
|||
chomp $cnt;
|
||||
die "Duh: Mbinary $cnt" if $cnt !~ /^\d+$/ or $cnt<1;
|
||||
$line="";
|
||||
while($cnt) {
|
||||
my $buf;
|
||||
my $num = $self->{'socketi'}->read($buf,$cnt);
|
||||
die "S: Mbinary $cnt: $num: $!\n" if not defined $num or $num<=0;
|
||||
print $fh $buf;
|
||||
$res += $num;
|
||||
$cnt -= $num;
|
||||
}
|
||||
$res += $self->_fetchfile($fh, $cnt);
|
||||
} else {
|
||||
chomp $line;
|
||||
if($line eq "ok") {
|
||||
|
@ -384,6 +369,23 @@ sub file {
|
|||
|
||||
return ($name, $res);
|
||||
}
|
||||
sub _fetchfile {
|
||||
my ($self, $fh, $cnt) = @_;
|
||||
my $res;
|
||||
my $bufsize = 1024 * 1024;
|
||||
while($cnt) {
|
||||
if ($bufsize > $cnt) {
|
||||
$bufsize = $cnt;
|
||||
}
|
||||
my $buf;
|
||||
my $num = $self->{'socketi'}->read($buf,$bufsize);
|
||||
die "Server: Filesize $cnt: $num: $!\n" if not defined $num or $num<=0;
|
||||
print $fh $buf;
|
||||
$res += $num;
|
||||
$cnt -= $num;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
package main;
|
||||
|
|
Загрузка…
Ссылка в новой задаче