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]
Gzip.pm
Description: application/perl-module
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
pgpvImgJNkIm4.pgp
Description: PGP signature

