Source: dpkg
Version: 1.19.2
Severity: wishlist
Tags: patch
Hi,
When passing the --hash= option, dpkg-scanpackages will still
calculate all supported checksum variants via a call to
checksums_get_list() in Dpkg::Checksums::add_from_file.
On my system, this results in calculating sha1, sha256 and md5sum
values even if we then go and throw all but one away (eg. using
--hash=sha256). This leaves a potential 3X speed improvement and
avoids needless disk I/O, etc.
Patch attached.
Regards,
--
,''`.
: :' : Chris Lamb
`. `'` [email protected] / chris-lamb.co.uk
`-
diff --git a/scripts/dpkg-scanpackages.pl b/scripts/dpkg-scanpackages.pl
index 05710ae..e9ff681 100755
--- a/scripts/dpkg-scanpackages.pl
+++ b/scripts/dpkg-scanpackages.pl
@@ -196,10 +196,8 @@ sub process_deb {
$fields->{'Filename'} = "$pathprefix$fn";
my $sums = Dpkg::Checksums->new();
- $sums->add_from_file($fn);
- foreach my $alg (checksums_get_list()) {
- next if %hash and not $hash{$alg};
-
+ $sums->add_from_file($fn, checksums => \@checksums);
+ foreach my $alg (@checksums) {
if ($alg eq 'md5') {
$fields->{'MD5sum'} = $sums->get_checksum($fn, $alg);
} else {
@@ -223,9 +221,9 @@ if (not (@ARGV >= 1 and @ARGV <= 3)) {
my $type = $options{type} // 'deb';
my $arch = $options{arch};
-%hash = map { $_ => 1 } split /,/, $options{hash} // '';
+@checksums = defined($options{hash}) ? split /,/, $options{hash} :
checksums_get_list();
-foreach my $alg (keys %hash) {
+foreach my $alg (@checksums) {
if (not checksums_is_supported($alg)) {
usageerr(g_('unsupported checksum \'%s\''), $alg);
}