summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Martin Langhoff <martin@catalyst.net.nz>2006-05-23 20:08:58 +1200
committerLibravatar Junio C Hamano <junkio@cox.net>2006-05-23 01:16:08 -0700
commit55cad8429954c7d08d0ce86155e7f9adf2f4c6ad (patch)
tree376c7847b1c2e84e0e13cd7dc1d3831b7693d75f
parentcvsimport: cleanup commit function (diff)
downloadtgif-55cad8429954c7d08d0ce86155e7f9adf2f4c6ad.tar.xz
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>
-rwxr-xr-xgit-cvsimport.perl36
1 files changed, 19 insertions, 17 deletions
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index f0e4d2422b..41ee9a608d 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -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;