[strip-nondeterminism] 01/03: File::SND: Lazy load most handlers
Chris Lamb
chris at chris-lamb.co.uk
Mon Jul 10 21:08:05 UTC 2017
This is an automated email from the git hooks/post-receive script.
lamby pushed a commit to branch master
in repository strip-nondeterminism.
commit 45ee7391b4f2da98ac01cb9851c3e8ba173809d9
Author: Niels Thykier <niels at thykier.net>
Date: Mon Jul 10 20:19:54 2017 +0000
File::SND: Lazy load most handlers
This reduces the start up time of dh_strip_nondeterminism to ~0.10s
from ~0.17s in a "no-op" case.
Signed-off-by: Niels Thykier <niels at thykier.net>
---
lib/File/StripNondeterminism.pm | 73 ++++++++++++++++++++++++-----------------
1 file changed, 42 insertions(+), 31 deletions(-)
diff --git a/lib/File/StripNondeterminism.pm b/lib/File/StripNondeterminism.pm
index c29d4df..c153b0e 100644
--- a/lib/File/StripNondeterminism.pm
+++ b/lib/File/StripNondeterminism.pm
@@ -22,16 +22,9 @@ use strict;
use warnings;
use POSIX qw(tzset);
-use File::StripNondeterminism::handlers::ar;
-use File::StripNondeterminism::handlers::cpio;
-use File::StripNondeterminism::handlers::gettext;
-use File::StripNondeterminism::handlers::gzip;
-use File::StripNondeterminism::handlers::jar;
use File::StripNondeterminism::handlers::javadoc;
use File::StripNondeterminism::handlers::pearregistry;
-use File::StripNondeterminism::handlers::png;
use File::StripNondeterminism::handlers::javaproperties;
-use File::StripNondeterminism::handlers::zip;
our($VERSION, $canonical_time, $clamp_time);
@@ -59,29 +52,29 @@ sub get_normalizer_for_file($) {
# ar
if (m/\.a$/ && _get_file_type($_) =~ m/ar archive/) {
- return \&File::StripNondeterminism::handlers::ar::normalize;
+ return _handler('ar');
}
# cpio
if (m/\.cpio$/ && _get_file_type($_) =~ m/cpio archive/) {
- return \&File::StripNondeterminism::handlers::cpio::normalize;
+ return _handler('cpio');
}
# gettext
if (m/\.g?mo$/ && _get_file_type($_) =~ m/GNU message catalog/) {
- return \&File::StripNondeterminism::handlers::gettext::normalize;
+ return _handler('gettext');
}
# gzip
if (m/\.(gz|dz)$/ && _get_file_type($_) =~ m/gzip compressed data/) {
- return \&File::StripNondeterminism::handlers::gzip::normalize;
+ return _handler('gzip');
}
# jar
if (m/\.(jar|war|hpi|apk)$/
&& _get_file_type($_) =~ m/(Java|Zip) archive data/) {
- return \&File::StripNondeterminism::handlers::jar::normalize;
+ return _handler('jar');
}
# javadoc
if (m/\.html$/
&& File::StripNondeterminism::handlers::javadoc::is_javadoc_file($_)) {
- return \&File::StripNondeterminism::handlers::javadoc::normalize;
+ return _handler('javadoc');
}
# pear registry
if (
@@ -89,11 +82,11 @@ sub get_normalizer_for_file($) {
&& File::StripNondeterminism::handlers::pearregistry::is_registry_file(
$_)
) {
- return \&File::StripNondeterminism::handlers::pearregistry::normalize;
+ return _handler('pearregistry');
}
# PNG
if (m/\.png$/ && _get_file_type($_) =~ m/PNG image data/) {
- return \&File::StripNondeterminism::handlers::png::normalize;
+ return _handler('png');
}
# pom.properties, version.properties
if (
@@ -101,32 +94,50 @@ sub get_normalizer_for_file($) {
&& File::StripNondeterminism::handlers::javaproperties::is_java_properties_file(
$_)
) {
- return
- \&File::StripNondeterminism::handlers::javaproperties::normalize;
+ return _handler('javaproperties');
}
# zip
if (m/\.(zip|pk3|epub|whl|xpi|htb|zhfst|par)$/
&& _get_file_type($_) =~ m/Zip archive data|EPUB document/) {
- return \&File::StripNondeterminism::handlers::zip::normalize;
+ return _handler('zip');
}
return undef;
}
-our %typemap = (
- ar => \&File::StripNondeterminism::handlers::ar::normalize,
- cpio => \&File::StripNondeterminism::handlers::cpio::normalize,
- gettext => \&File::StripNondeterminism::handlers::gettext::normalize,
- gzip => \&File::StripNondeterminism::handlers::gzip::normalize,
- jar => \&File::StripNondeterminism::handlers::jar::normalize,
- javadoc => \&File::StripNondeterminism::handlers::javadoc::normalize,
- pearregistry => \&File::StripNondeterminism::handlers::pearregistry::normalize,
- png => \&File::StripNondeterminism::handlers::png::normalize,
- javaproperties => \&File::StripNondeterminism::handlers::javaproperties::normalize,
- zip => \&File::StripNondeterminism::handlers::zip::normalize,
+
+our %HANDLER_CACHE;
+our %KNOWN_HANDLERS = (
+ ar => 1,
+ cpio => 1,
+ gettext => 1,
+ gzip => 1,
+ jar => 1,
+ javadoc => 1,
+ pearregistry => 1,
+ png => 1,
+ javaproperties => 1,
+ zip => 1,
);
+
+sub _handler {
+ my ($handler_name) = @_;
+ return $HANDLER_CACHE{$handler_name} if exists($HANDLER_CACHE{$handler_name});
+ die("Unknown handler: ${handler_name}\n")
+ if not exists($KNOWN_HANDLERS{$handler_name});
+ my $pkg = "File::StripNondeterminism::handlers::${handler_name}";
+ my $mod = "File/StripNondeterminism/handlers/${handler_name}.pm";
+ my $sub_name = "${pkg}::normalize";
+ require $mod;
+ no strict 'refs';
+ if (not defined &{$sub_name}) {
+ die("Internal error: No handler for $handler_name!?\n");
+ }
+ my $handler = \&{$sub_name};
+ return $HANDLER_CACHE{$handler_name} = $handler;
+}
+
sub get_normalizer_by_name($) {
- $_ = shift;
- return $typemap{$_};
+ return _handler(shift);
}
1;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/strip-nondeterminism.git
More information about the Reproducible-commits
mailing list