The following commit has been merged in the master branch:
commit 36954c36abe3ce8e42b3c231579ef9e497f0da6d
Author: Guillem Jover <guil...@debian.org>
Date:   Fri Aug 19 12:59:35 2011 +0200

    Dpkg::Compression: Change default values depending on the compressor used
    
    This makes dpkg-source use more appropriate default compression values
    depending on the compressor used.
    
    Prompted-by: Timo Juhani Lindfors <timo.lindf...@iki.fi>

diff --git a/debian/changelog b/debian/changelog
index 9f29809..ec2e9ae 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -193,6 +193,9 @@ dpkg (1.16.1) UNRELEASED; urgency=low
     Thanks to Jonathan Nieder <jrnie...@gmail.com>. Closes: #635683
   * Clarify the default dpkg-deb compression-levels on the man page.
   * Clarify dpkg --update-avail usage error message. Closes: #628055
+  * Change Dpkg::Compression default values depending on the compressor
+    used, and as such dpkg-source inherits this functionality.
+    Prompted by Timo Juhani Lindfors <timo.lindf...@iki.fi>.
 
   [ Updated dpkg translations ]
   * German (Sven Joachim). Closes: #620312
diff --git a/man/dpkg-source.1 b/man/dpkg-source.1
index d339303..e124fe6 100644
--- a/man/dpkg-source.1
+++ b/man/dpkg-source.1
@@ -153,7 +153,7 @@ dpkg\-dev 1.15.5.
 Compression level to use. As with \fB\-Z\fP it only affects newly created
 files. Supported values are:
 .IR 1 " to " 9 ", " best ", and " fast .
-\fI9\fP is the default.
+The default is \fI9\fP for gzip and bzip2, \fI6\fP for xz and lzma.
 .TP
 .BR \-i "[\fIregexp\fP], " \-\-diff\-ignore [=\fIregexp\fP]
 You may specify a perl regular expression to match files you want
diff --git a/scripts/Dpkg/Compression.pm b/scripts/Dpkg/Compression.pm
index 0a5ed94..c83fb4e 100644
--- a/scripts/Dpkg/Compression.pm
+++ b/scripts/Dpkg/Compression.pm
@@ -18,7 +18,7 @@ package Dpkg::Compression;
 use strict;
 use warnings;
 
-our $VERSION = "1.00";
+our $VERSION = "1.01";
 
 use Dpkg::ErrorHandling;
 use Dpkg::Gettext;
@@ -54,26 +54,30 @@ my $COMP = {
        "file_ext" => "gz",
        "comp_prog" => [ "gzip", "--no-name", "--rsyncable" ],
        "decomp_prog" => [ "gunzip" ],
+       "default_level" => 9,
     },
     "bzip2" => {
        "file_ext" => "bz2",
        "comp_prog" => [ "bzip2" ],
        "decomp_prog" => [ "bunzip2" ],
+       "default_level" => 9,
     },
     "lzma" => {
        "file_ext" => "lzma",
        "comp_prog" => [ 'xz', '--format=lzma' ],
        "decomp_prog" => [ 'unxz', '--format=lzma' ],
+       "default_level" => 6,
     },
     "xz" => {
        "file_ext" => "xz",
        "comp_prog" => [ "xz" ],
        "decomp_prog" => [ "unxz" ],
+       "default_level" => 6,
     },
 };
 
 our $default_compression = "gzip";
-our $default_compression_level = 9;
+our $default_compression_level = undef;
 
 =item $compression_re_file_ext
 
@@ -117,6 +121,7 @@ sub compression_is_supported {
 Returns the requested property of the compression method. Returns undef if
 either the property or the compression method doesn't exist. Valid
 properties currently include "file_ext" for the file extension,
+"default_level" for the default compression level,
 "comp_prog" for the name of the compression program and "decomp_prog" for
 the name of the decompression program.
 
@@ -173,25 +178,29 @@ sub compression_set_default {
 =item my $level = compression_get_default_level()
 
 Return the default compression level used when compressing data. It's "9"
-unless C<compression_set_default_level> has been used to change it.
+for "gzip" and "bzip2", "6" for "xz" and "lzma", unless
+C<compression_set_default_level> has been used to change it.
 
 =item compression_set_default_level($level)
 
-Change the default compression level. Errors out if the
+Change the default compression level. Passing undef as the level will
+reset it to the compressor specific default, otherwise errors out if the
 level is not valid (see C<compression_is_valid_level>).
-either a number between 1 and 9 or "fast"
-or "best".
 
 =cut
 
 sub compression_get_default_level {
-    return $default_compression_level;
+    if (defined $default_compression_level) {
+        return $default_compression_level;
+    } else {
+        return compression_get_property($default_compression, "default_level");
+    }
 }
 
 sub compression_set_default_level {
     my ($level) = @_;
     error(_g("%s is not a compression level"), $level)
-            unless compression_is_valid_level($level);
+            unless !defined($level) or compression_is_valid_level($level);
     $default_compression_level = $level;
 }
 
diff --git a/scripts/t/850_Dpkg_Compression.t b/scripts/t/850_Dpkg_Compression.t
index b792905..a8054f6 100644
--- a/scripts/t/850_Dpkg_Compression.t
+++ b/scripts/t/850_Dpkg_Compression.t
@@ -13,11 +13,12 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-use Test::More tests => 9;
+use Test::More tests => 13;
 
 use strict;
 use warnings;
 
+use_ok('Dpkg::Compression');
 use_ok('Dpkg::Compression::FileHandle');
 
 my $tmpdir = "t.tmp/850_Dpkg_Compression";
@@ -84,6 +85,15 @@ sub test_read {
     is_deeply(\@lines, \@read, "$filename correctly read (IO::Handle 
methods)");
 }
 
+# Test changing the default compression levels
+my $old_level = compression_get_default_level();
+compression_set_default_level(1);
+is(compression_get_default_level(), 1, "change default compression level");
+compression_set_default_level(5);
+is(compression_get_default_level(), 5, "change default compression level");
+compression_set_default_level(undef);
+is(compression_get_default_level(), $old_level, "reset default compression 
level");
+
 # Test write on uncompressed file
 test_write("$tmpdir/myfile", \&check_uncompressed);
 

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to