{"thread":{"id":"14810","subject":"[PATCH not ready]: allow cvsimport to use compression when talking to remote cvs server","startedAt":"2008-08-02T14:05:58Z","lastAt":"2008-08-02T14:05:58Z","messageCount":1,"participants":["Arkadiusz Miskiewicz"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"85980","messageId":"g71pk6$eki$1@ger.gmane.org","threadId":"14810","inReplyTo":null,"subject":"[PATCH not ready]: allow cvsimport to use compression when talking to remote cvs server","fromName":"Arkadiusz Miskiewicz","fromEmail":"arekm@pld-linux.org","sentAt":"2008-08-02T14:05:58Z","receivedAt":"2008-08-02T14:05:58Z","isPatch":true,"sender":{"key":"arekm@pld-linux.org","avatar":null},"body":"\nThis patch adds ability to git cvsimport use compression\nwhen talking to remote cvs pserver (in normal cvs client using compression\nmakes things a lot faster so it should help here, too).\n\nUnfortunately it doesn't work due to: new IO::Uncompress::RawInflate()\nhanging at constructor. No idea why constructor wants to do read()\nover a socket. Maybe whole IO::Compress stuff isn't ready to work over\nsockets (that's the question to perl gurus).\n\nFell free to make it working/improve it. I have no idea how to make it work\nat this moment.\n\n--- git-cvsimport.org   2008-08-02 12:00:25.342934972 +0200\n+++ git-cvsimport       2008-08-02 16:01:33.588363079 +0200\n@@ -27,6 +27,15 @@\n use POSIX qw(strftime dup2 ENOENT);\n use IPC::Open2;\n \n+my $compress_support = 1;\n+eval \"use IO::Compress::RawDeflate; use IO::Uncompress::RawInflate\";\n+$compress_support = 0 if ($@);\n+if ($compress_support) {\n+       use IO::Compress::RawDeflate;\n+       use IO::Uncompress::RawInflate;\n+}\n+\n+\n $SIG{'PIPE'}=\"IGNORE\";\n $ENV{'TZ'}=\"UTC\";\n \n@@ -312,7 +321,9 @@\n                my @cvs = ($cvs, 'server');\n                my ($local, $user, $host);\n                $local = $repo =~ s/:local://;\n-               if (!$local) {\n+               if ($local) {\n+                   $compress_support = 0;\n+               } else {\n                    $repo =~ s/:ext://;\n                    $local = !($repo =~ s/^(?:([^\\@:]+)\\@)?([^:]+)://);\n                    ($user, $host) = ($1, $2);\n@@ -356,6 +367,12 @@\n        die \"validReply: $res\\n\" if $res ne \"ok\";\n \n        $self->{'socketo'}->write(\"UseUnchanged\\n\") if $rep =~ /\\bUseUnchanged\\b/;\n+       if ($compress_support and $rep =~ /\\bGzip-stream\\b/) {\n+               my $level = 3; # make it cmd line option\n+               $self->{'socketo'}->write(\"Gzip-stream $level\\n\");\n+               $self->{'socketo'} = new IO::Compress::RawDeflate $self->{'socketo'},\nLevel => $level or die(\"Setting up gzip compression failed:\n$IO::Compress::RawDeflate::RawDeflateError\\n\");\n+               $self->{'socketi'} = new IO::Uncompress::RawInflate $self->{'socketi'},\nTransparent => 0 or die(\"Setting up gzip uncompression failed:\n$IO::Uncompress::RawInflate::RawInflateError\\n\");\n+       }\n        $self->{'repo'} = $repo;\n }\n \n\n\n-- \nArkadiusz Miśkiewicz        PLD/Linux Team\narekm / maven.pl            http://ftp.pld-linux.org/\n"}]}