Package: debpool
Severity: wishlist
Tags: patch

Attached is a patch that lets debpool handle bzip2 compression in addition to 
gzip, and in fact any number of compression algorithms in a dynamical fashion 
(could come in handy when somebody wants lzma support).

Attached are also a rewritten Gzip module and a new Bzip2 module, both 
implementing the simple OO interface needed (rewriting Gzip.pm to use 
Compress::Zlib is actually a separate matter, but the relevant subroutines 
(new, Compress_File, Error, and Name) can simply be copied to the existing 
Gzip.pm).

I've omitted the trivial addition to Config.pm.

-- 
Magnus Holmgren        [EMAIL PROTECTED]

Attachment: Gzip.pm
Description: application/perl-module

Attachment: Bzip2.pm
Description: application/perl-module

--- debpool-0.2.3/bin/debpool
+++ debpool-0.2.4/bin/debpool	2007-03-19 16:33:46.363875256 +0100
@@ -89,11 +89,21 @@
 use DebPool::Dirs qw(:functions :vars); # Directory management
 use DebPool::DB qw(:functions :vars); # Various databases
 use DebPool::GnuPG qw(:functions :vars); # GnuPG interaction routines
-use DebPool::Gzip qw(:functions :vars); # Gzip interaction routines
 use DebPool::Logging qw(:functions :facility :level); # Logging routines
 use DebPool::Packages qw(:functions :vars); # Distribution databases
 use DebPool::Signal qw(:functions :vars); # Handle signals
 
+my @compression_methods;
+
+if ($Options{'compress_dists'}) {
+    require DebPool::Gzip; # Gzip interaction routines
+    push @compression_methods, new DebPool::Gzip;
+}
+if ($Options{'bzcompress_dists'}) {
+    require DebPool::Bzip2; # Bzip2 interaction routines
+    push @compression_methods, new DebPool::Bzip2;
+}
+
 # Before we do anything else, let's find out if we need to act as a daemon,
 # and if so, whether we can manage to pull it off.
 
@@ -446,19 +456,21 @@
 
             # If we're compressing distribution files, do that here.
 
-            my($gzfile);
-            if ($Options{'compress_dists'}) {
-                $gzfile = Gzip_File($file);
-
-                if (!defined($gzfile)) {
-                    my($msg) = "Couldn't create compressed file: ";
-                    $msg .= $DebPool::Gzip::Error;
-                    Log_Message($msg, LOG_GENERAL, LOG_ERROR);
+            my @zfiles;
 
-                    unlink($file);
-                    next;
-                }
-            }
+            foreach my $method (@compression_methods) {
+                my $zfile = $method->Compress_File($file);
+
+                if (!defined($zfile)) {
+                    my($msg) = "Couldn't create compressed file (";
+                    $msg .= $method->Name . "): ";
+                    $msg .= $method->Error;
+                    Log_Message($msg, LOG_GENERAL, LOG_ERROR);
+                    unlink($file, @zfiles);
+                    next ARCH_LOOP;
+                }
+                push @zfiles, $zfile;
+            }
 
             # If we're doing Release files, now is the time for triples.
 
@@ -479,10 +491,7 @@
                     $msg .= $DebPool::Release::Error;
                     Log_Message($msg, LOG_GENERAL, LOG_ERROR);
 
-                    unlink($file);
-                    if (defined($gzfile)) {
-                        unlink($gzfile);
-                    }
+                    unlink($file, @zfiles);
                     next;
                 }
                 
@@ -494,11 +503,7 @@
                         $msg .= $DebPool::GnuPG::Error;
                         Log_Message($msg, LOG_GENERAL, LOG_ERROR);
     
-                        unlink($file);
-
-                        if (defined($gzfile)) {
-                            unlink($gzfile);
-                        }
+                        unlink($file, @zfiles);
 
                         if (defined($relfile)) {
                             unlink($relfile);
@@ -511,7 +516,7 @@
 
             # Install {Packages,Sources}{,.gz}
 
-            if (!Install_List(@triple, $file, $gzfile)) {
+            if (!Install_List(@triple, $file, @zfiles)) {
 
                 my($msg) = "Couldn't install distribution files for ";
                 $msg .= "$dist/$section/${arch}: " . $DebPool::Packages::Error;
@@ -521,8 +526,8 @@
                     unlink($file);
                 }
 
-                if (defined($gzfile) && -e $gzfile) {
-                    unlink($gzfile);
+                foreach (@zfiles) {
+                    unlink if -e;
                 }
 
                 if (defined($relfile) && -e $relfile) {
@@ -560,8 +565,9 @@
             $pushfile =~ s/${dist}\///;
             push(@rel_filelist, $pushfile);
 
-            if (defined($gzfile)) {
-                push(@rel_filelist, $pushfile . '.gz');
+            foreach (@zfiles) {
+                my ($ext) = m{\.([^/]+)$};  # List context!
+                push(@rel_filelist, "${pushfile}.${ext}");
             }
 
             if (defined($relfile)) {
--- debpool-0.2.3/share/DebPool/Packages.pm
+++ debpool-0.2.4/share/DebPool/Packages.pm	2007-03-19 16:36:01.181347481 +0100
@@ -1192,7 +1192,7 @@
     use DebPool::Config qw(:vars);
     use DebPool::Dirs qw(:functions);
 
-    my($archive, $component, $architecture, $listfile, $gzfile) = @_;
+    my($archive, $component, $architecture, $listfile, @zfiles) = @_;
 
     my($dists_file_mode) = $Options{'dists_file_mode'};
     my($inst_file) = "$Options{'dists_dir'}/";
@@ -1206,11 +1206,14 @@
         return 0;
     }
 
-    if (defined($gzfile) && !Move_File($gzfile, "${inst_file}.gz",
+    foreach my $zfile (@zfiles) {
+	my ($ext) = $zfile =~ m{\.([^/]+)$};
+	if (!Move_File($zfile, "${inst_file}.${ext}",
             $dists_file_mode)) {
-        $Error = "Couldn't install gzipped distribution file '$gzfile' ";
-        $Error .= "to '${inst_file}.gz': ${DebPool::Util::Error}";
-        return 0;
+	    $Error = "Couldn't install compressed distribution file '$zfile' ";
+	    $Error .= "to '${inst_file}${ext}': ${DebPool::Util::Error}";
+	    return 0;
+	}
     }
 
     return 1;
--- debpool-0.2.3/share/DebPool/Release.pm
+++ debpool-0.2.4/share/DebPool/Release.pm	2007-03-18 09:35:22.779559043 +0100
@@ -93,6 +93,8 @@
     'Sources',
     'Packages.gz',
     'Sources.gz',
+    'Packages.bz2',
+    'Sources.bz2',
 );
 
 ### File lexicals

Attachment: pgpvImgJNkIm4.pgp
Description: PGP signature

Reply via email to