This is an automated email from the git hooks/post-receive script.

guillem pushed a commit to branch main
in repository dpkg.

View the commit online:
https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=d3c314634429c7566c7b6670bb6ac464ebcbb37b

commit d3c314634429c7566c7b6670bb6ac464ebcbb37b
Author: Guillem Jover <[email protected]>
AuthorDate: Thu Dec 22 03:17:35 2022 +0100

    Dpkg::Compression: Add new compression_get/set_level() and switch to it
    
    These functions handle compression specific levels, instead of just
    modifying the global default.
---
 scripts/Dpkg/Compression.pm         | 44 ++++++++++++++++++++++++++++++++++++-
 scripts/Dpkg/Compression/Process.pm |  7 +++---
 scripts/Dpkg/Source/Package.pm      |  3 +--
 scripts/Dpkg/Source/Package/V1.pm   |  2 +-
 scripts/t/Dpkg_Compression.t        | 11 +++++++++-
 5 files changed, 58 insertions(+), 9 deletions(-)

diff --git a/scripts/Dpkg/Compression.pm b/scripts/Dpkg/Compression.pm
index fceed7b66..2e0939c7e 100644
--- a/scripts/Dpkg/Compression.pm
+++ b/scripts/Dpkg/Compression.pm
@@ -31,6 +31,8 @@ our @EXPORT = qw(
     compression_set_default
     compression_get_default_level
     compression_set_default_level
+    compression_get_level
+    compression_set_level
     compression_is_valid_level
 );
 
@@ -249,6 +251,45 @@ sub compression_set_default_level {
     $default_compression_level = $level;
 }
 
+=item $level = compression_get_level($comp)
+
+Return the compression level used when compressing data with a specific
+compressor. The value returned is the specific compression level if it has
+been set, otherwise the global default compression level if it has been set,
+falling back to the specific default compression level.
+
+=cut
+
+sub compression_get_level {
+    my $comp = shift;
+
+    error(g_('%s is not a supported compression'), $comp)
+        unless compression_is_supported($comp);
+
+    return $COMP{$comp}{level} //
+           $default_compression_level //
+           $COMP{$comp}{default_level};
+}
+
+=item compression_set_level($comp, $level)
+
+Change the compression level for a specific compressor. Passing undef as
+the level will reset it to the specific default compressor level, otherwise
+errors out if the level is not valid (see C<compression_is_valid_level>).
+
+=cut
+
+sub compression_set_level {
+    my ($comp, $level) = @_;
+
+    error(g_('%s is not a supported compression'), $comp)
+        unless compression_is_supported($comp);
+    error(g_('%s is not a compression level'), $level)
+        if defined $level && ! compression_is_valid_level($level);
+
+    $COMP{$comp}{level} = $level;
+}
+
 =item compression_is_valid_level($level)
 
 Returns a boolean indicating whether $level is a valid compression level
@@ -267,7 +308,8 @@ sub compression_is_valid_level {
 
 =head2 Version 2.01 (dpkg 1.21.14)
 
-New functions: compression_get_file_extension().
+New functions: compression_get_file_extension(), compression_get_level(),
+and compression_set_level().
 
 =head2 Version 2.00 (dpkg 1.20.0)
 
diff --git a/scripts/Dpkg/Compression/Process.pm 
b/scripts/Dpkg/Compression/Process.pm
index 9ced4598d..a912c523c 100644
--- a/scripts/Dpkg/Compression/Process.pm
+++ b/scripts/Dpkg/Compression/Process.pm
@@ -86,9 +86,8 @@ B<Dpkg::Compression>).
 
 sub set_compression_level {
     my ($self, $level) = @_;
-    error(g_('%s is not a compression level'), $level)
-           unless compression_is_valid_level($level);
-    $self->{compression_level} = $level;
+
+    compression_set_level($self->{compression}, $level);
 }
 
 =item @exec = $proc->get_compress_cmdline()
@@ -108,7 +107,7 @@ sub get_compress_cmdline {
     my $self = shift;
 
     my @prog = @{compression_get_property($self->{compression}, 'comp_prog')};
-    my $level = $self->{compression_level};
+    my $level = compression_get_level($self->{compression});
     if ($level =~ m/^[1-9]$/) {
         push @prog, "-$level";
     } else {
diff --git a/scripts/Dpkg/Source/Package.pm b/scripts/Dpkg/Source/Package.pm
index 557fbfb89..412ea5d92 100644
--- a/scripts/Dpkg/Source/Package.pm
+++ b/scripts/Dpkg/Source/Package.pm
@@ -269,8 +269,7 @@ sub init_options {
 
     # Set default compressor for new formats.
     $self->{options}{compression} //= 'xz';
-    $self->{options}{comp_level} //= 
compression_get_property($self->{options}{compression},
-                                                              'default_level');
+    $self->{options}{comp_level} //= 
compression_get_level($self->{options}{compression});
     $self->{options}{comp_ext} //= 
compression_get_file_extension($self->{options}{compression});
 }
 
diff --git a/scripts/Dpkg/Source/Package/V1.pm 
b/scripts/Dpkg/Source/Package/V1.pm
index f36f2252c..96e29322b 100644
--- a/scripts/Dpkg/Source/Package/V1.pm
+++ b/scripts/Dpkg/Source/Package/V1.pm
@@ -68,7 +68,7 @@ sub init_options {
 
     # V1.0 only supports gzip compression.
     $self->{options}{compression} //= 'gzip';
-    $self->{options}{comp_level} //= compression_get_property('gzip', 
'default_level');
+    $self->{options}{comp_level} //= compression_get_level('gzip');
     $self->{options}{comp_ext} //= compression_get_file_extension('gzip');
 }
 
diff --git a/scripts/t/Dpkg_Compression.t b/scripts/t/Dpkg_Compression.t
index 497c1709c..3fd5983d3 100644
--- a/scripts/t/Dpkg_Compression.t
+++ b/scripts/t/Dpkg_Compression.t
@@ -16,7 +16,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 42;
+use Test::More tests => 48;
 use Test::Dpkg qw(:paths);
 
 use IPC::Cmd qw(can_run);
@@ -127,6 +127,15 @@ is(compression_get_file_extension('xz'), 'xz', 'xz file 
ext');
 is(compression_get_file_extension('bzip2'), 'bz2', 'bzip2 file ext');
 is(compression_get_file_extension('lzma'), 'lzma', 'lzma file ext');
 
+is(compression_get_level('gzip'), 9, 'gzip level is 9');
+compression_set_level('gzip', 1);
+is(compression_get_level('gzip'), 1, 'gzip level is now 1');
+compression_set_level('gzip');
+is(compression_get_level('gzip'), 9, 'gzip level is back to 9');
+is(compression_get_level('xz'), 6, 'xz level is 6');
+is(compression_get_level('bzip2'), 9, 'bzip2 level is 9');
+is(compression_get_level('lzma'), 6, 'lzma level is 6');
+
 my $ext_regex = compression_get_file_extension_regex();
 
 ok('filename.gz' =~ m/\.$ext_regex$/, '.gz matches regex');

-- 
Dpkg.Org's dpkg

Reply via email to