The following commit has been merged in the master branch:
commit 625a24bbc8280362c2ab0e3f2f83aacbf25283e0
Author: Guillem Jover <guil...@debian.org>
Date:   Tue Nov 22 07:09:31 2011 +0100

    dpkg-deb: Treat compression levels independently for each backend
    
    Even if the compression level allowed range supported by gzip/zlib
    compatible interfaces is almost the same (0-9), its actual meaning
    is backend specific, so treat it that way.
    
    This allows to get native meanings for at least level 0, which maps
    to 1 for bzip2, and becomes a new allowed level for xz and lzma.
    
    The reason for the previous behaviour regarding level 0 is historic,
    due to zlib treating it that way, and was inadvertently carried over
    when new compressors were added to libdpkg.

diff --git a/debian/changelog b/debian/changelog
index 5f40f17..190370b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -34,6 +34,9 @@ dpkg (1.16.2) UNRELEASED; urgency=low
   * Add new deb-origin.5 man page. Closes: #608884
     Thanks to Matt Kraai <kr...@ftbfs.org>.
   * Return correct status on start-stop-daemon --status when using --pidfile.
+  * Treat dpkg-deb compression level independently for each backend. This
+    has the effect of changing the current behaviour for level 0 on all
+    compressors except gzip.
 
   [ Raphaƫl Hertzog ]
   * Update Dpkg::Shlibs to look into multiarch paths when cross-building
diff --git a/lib/dpkg/compress.c b/lib/dpkg/compress.c
index 59ffa94..fb761d5 100644
--- a/lib/dpkg/compress.c
+++ b/lib/dpkg/compress.c
@@ -77,6 +77,7 @@ struct compressor {
        const char *name;
        const char *extension;
        int default_level;
+       void (*fixup_params)(struct compress_params *params);
        void (*compress)(int fd_in, int fd_out, struct compress_params *params,
                         const char *desc);
        void (*decompress)(int fd_in, int fd_out, const char *desc);
@@ -87,6 +88,11 @@ struct compressor {
  */
 
 static void
+fixup_none_params(struct compress_params *params)
+{
+}
+
+static void
 decompress_none(int fd_in, int fd_out, const char *desc)
 {
        fd_fd_copy(fd_in, fd_out, -1, _("%s: decompression"), desc);
@@ -102,6 +108,7 @@ static const struct compressor compressor_none = {
        .name = "none",
        .extension = "",
        .default_level = 0,
+       .fixup_params = fixup_none_params,
        .compress = compress_none,
        .decompress = decompress_none,
 };
@@ -110,6 +117,14 @@ static const struct compressor compressor_none = {
  * Gzip compressor.
  */
 
+static void
+fixup_gzip_params(struct compress_params *params)
+{
+       /* Normalize compression level. */
+       if (params->level == 0)
+               params->type = compressor_type_none;
+}
+
 #ifdef WITH_ZLIB
 static void
 decompress_gzip(int fd_in, int fd_out, const char *desc)
@@ -210,6 +225,7 @@ static const struct compressor compressor_gzip = {
        .name = "gzip",
        .extension = ".gz",
        .default_level = 9,
+       .fixup_params = fixup_gzip_params,
        .compress = compress_gzip,
        .decompress = decompress_gzip,
 };
@@ -218,6 +234,14 @@ static const struct compressor compressor_gzip = {
  * Bzip2 compressor.
  */
 
+static void
+fixup_bzip2_params(struct compress_params *params)
+{
+       /* Normalize compression level. */
+       if (params->level == 0)
+               params->level = 1;
+}
+
 #ifdef WITH_BZ2
 static void
 decompress_bzip2(int fd_in, int fd_out, const char *desc)
@@ -323,6 +347,7 @@ static const struct compressor compressor_bzip2 = {
        .name = "bzip2",
        .extension = ".bz2",
        .default_level = 9,
+       .fixup_params = fixup_bzip2_params,
        .compress = compress_bzip2,
        .decompress = decompress_bzip2,
 };
@@ -350,6 +375,7 @@ static const struct compressor compressor_xz = {
        .name = "xz",
        .extension = ".xz",
        .default_level = 6,
+       .fixup_params = fixup_none_params,
        .compress = compress_xz,
        .decompress = decompress_xz,
 };
@@ -377,6 +403,7 @@ static const struct compressor compressor_lzma = {
        .name = "lzma",
        .extension = ".lzma",
        .default_level = 6,
+       .fixup_params = fixup_none_params,
        .compress = compress_lzma,
        .decompress = decompress_lzma,
 };
@@ -434,6 +461,12 @@ compressor_find_by_extension(const char *extension)
        return compressor_type_unknown;
 }
 
+static void
+compressor_fixup_params(struct compress_params *params)
+{
+       compressor_get(params->type)->fixup_params(params);
+}
+
 void
 decompress_filter(enum compressor_type type, int fd_in, int fd_out,
                   const char *desc_fmt, ...)
@@ -462,12 +495,12 @@ compress_filter(struct compress_params *params, int 
fd_in, int fd_out,
        varbuf_vprintf(&desc, desc_fmt, args);
        va_end(args);
 
+       compressor_fixup_params(params);
+
        compressor = compressor_get(params->type);
 
        if (params->level < 0)
                params->level = compressor->default_level;
-       else if (params->level == 0)
-               compressor = &compressor_none;
 
        compressor->compress(fd_in, fd_out, params, desc.buf);
 }
diff --git a/man/dpkg-deb.1 b/man/dpkg-deb.1
index 26b684c..d5fc5b5 100644
--- a/man/dpkg-deb.1
+++ b/man/dpkg-deb.1
@@ -1,4 +1,4 @@
-.TH dpkg\-deb 1 "2011-08-14" "Debian Project" "dpkg suite"
+.TH dpkg\-deb 1 "2011-11-22" "Debian Project" "dpkg suite"
 .SH NAME
 dpkg\-deb \- Debian package archive (.deb) manipulation tool
 .
@@ -197,6 +197,9 @@ The default for this field is "${Package}\\t${Version}\\n".
 .BI \-z compress-level
 Specify which compression level to use on the compressor backend, when
 building a package (default is 9 for gzip and bzip2, 6 for xz and lzma).
+The accepted values are 0-9 with: 0 being mapped to compressor none for
+gzip and 0 mapped to 1 for bzip2. Before dpkg 1.16.2 level 0 was
+equivalent to compressor none for all compressors.
 .TP
 .BI \-Z compress-type
 Specify which compression type to use when building a package. Allowed

-- 
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