{"thread":{"id":"4251","subject":"[PATCH] cvsimport: introduce _fetchfile() method and used a 1M buffer to read()","startedAt":"2006-05-23T08:08:58Z","lastAt":"2006-05-23T08:08:58Z","messageCount":1,"participants":["Martin Langhoff"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"20516","messageId":"11483717381774-git-send-email-martin@catalyst.net.nz","threadId":"4251","inReplyTo":null,"subject":"[PATCH] cvsimport: introduce _fetchfile() method and used a 1M buffer to read()","fromName":"Martin Langhoff","fromEmail":"martin@catalyst.net.nz","sentAt":"2006-05-23T08:08:58Z","receivedAt":"2006-05-23T08:08:58Z","isPatch":true,"sender":{"key":"martin@laptop.org","avatar":null},"body":"File retrieval from the socket is now moved to _fetchfile() and we now\ncap reads at 1MB. This should limit the memory growth of the cvsimport\nprocess.\n\nSigned-off-by: Martin Langhoff <martin@catalyst.net.nz>\n\n---\n\n git-cvsimport.perl |   36 +++++++++++++++++++-----------------\n 1 files changed, 19 insertions(+), 17 deletions(-)\n\nc06eea55b2b061abe6c09fa0737d6bb87afa9d39\ndiff --git a/git-cvsimport.perl b/git-cvsimport.perl\nindex 5b68671..ace7087 100755\n--- a/git-cvsimport.perl\n+++ b/git-cvsimport.perl\n@@ -315,15 +315,7 @@ sub _line {\n \t\t\tchomp $cnt;\n \t\t\tdie \"Duh: Filesize $cnt\" if $cnt !~ /^\\d+$/;\n \t\t\t$line=\"\";\n-\t\t\t$res=0;\n-\t\t\twhile($cnt) {\n-\t\t\t\tmy $buf;\n-\t\t\t\tmy $num = $self->{'socketi'}->read($buf,$cnt);\n-\t\t\t\tdie \"Server: Filesize $cnt: $num: $!\\n\" if not defined $num or $num<=0;\n-\t\t\t\tprint $fh $buf;\n-\t\t\t\t$res += $num;\n-\t\t\t\t$cnt -= $num;\n-\t\t\t}\n+\t\t\t$res = $self->_fetchfile($fh, $cnt);\n \t\t} elsif($line =~ s/^ //) {\n \t\t\tprint $fh $line;\n \t\t\t$res += length($line);\n@@ -335,14 +327,7 @@ sub _line {\n \t\t\tchomp $cnt;\n \t\t\tdie \"Duh: Mbinary $cnt\" if $cnt !~ /^\\d+$/ or $cnt<1;\n \t\t\t$line=\"\";\n-\t\t\twhile($cnt) {\n-\t\t\t\tmy $buf;\n-\t\t\t\tmy $num = $self->{'socketi'}->read($buf,$cnt);\n-\t\t\t\tdie \"S: Mbinary $cnt: $num: $!\\n\" if not defined $num or $num<=0;\n-\t\t\t\tprint $fh $buf;\n-\t\t\t\t$res += $num;\n-\t\t\t\t$cnt -= $num;\n-\t\t\t}\n+\t\t\t$res += $self->_fetchfile($fh, $cnt);\n \t\t} else {\n \t\t\tchomp $line;\n \t\t\tif($line eq \"ok\") {\n@@ -384,6 +369,23 @@ sub file {\n \n \treturn ($name, $res);\n }\n+sub _fetchfile {\n+\tmy ($self, $fh, $cnt) = @_;\n+\tmy $res;\n+\tmy $bufsize = 1024 * 1024;\n+\twhile($cnt) {\n+\t    if ($bufsize > $cnt) {\n+\t\t$bufsize = $cnt;\n+\t    }\n+\t    my $buf;      \n+\t    my $num = $self->{'socketi'}->read($buf,$bufsize);\n+\t    die \"Server: Filesize $cnt: $num: $!\\n\" if not defined $num or $num<=0;\n+\t    print $fh $buf;\n+\t    $res += $num;\n+\t    $cnt -= $num;\n+\t}\n+\treturn $res;\n+}\n \n \n package main;\n-- \n1.3.2.g82000\n"}]}