chiark / gitweb /
Test suite: Use stunt Dpkg::Changelog::Parse
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 30 May 2015 12:50:54 +0000 (13:50 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 31 May 2015 11:21:36 +0000 (12:21 +0100)
This saves a further 13s.  Overalll the stunt changelog machinery
saves 28s out of 100s (in my example case, the current
debpolicy-newreject).

tests/tests/debpolicy-newreject
tests/tstunt/Dpkg/Changelog/Parse.pm [new file with mode: 0644]
tests/tstunt/dpkg-parsechangelog

index c6260a72958d01364169ca2e649c85d1572706b4..da40631a3fa67760fafb3dda337addcae492c99e 100755 (executable)
@@ -2,7 +2,7 @@
 set -e
 . tests/lib
 
-t-tstunt dpkg-parsechangelog
+t-tstunt dpkg-parsechangelog Dpkg/Changelog/Parse.pm
 
 t-debpolicy
 t-prep-newpackage example 1.0
diff --git a/tests/tstunt/Dpkg/Changelog/Parse.pm b/tests/tstunt/Dpkg/Changelog/Parse.pm
new file mode 100644 (file)
index 0000000..4d797af
--- /dev/null
@@ -0,0 +1,49 @@
+# -*- perl -*-
+#
+# Copyright (C) 2015       Ian Jackson
+#
+# Some bits stolen from the proper Dpkg::Changelog::Parse
+# (from dpkg-dev 1.16.16):
+#
+# Copyright (C) 2005, 2007 Frank Lichtenheld <frank@lichtenheld.de>
+# Copyright (C) 2009       Raphael Hertzog <hertzog@debian.org>
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package Dpkg::Changelog::Parse;
+
+use strict;
+use warnings;
+
+our $VERSION = "1.00";
+
+use Dpkg::Control::Changelog;
+
+use base qw(Exporter);
+our @EXPORT = qw(changelog_parse);
+
+sub changelog_parse {
+    my (%options) = @_; # ignored
+
+    $options{'file'} //= 'debian/changelog';
+
+    open P, "dpkg-parsechangelog -l$options{'file'} |" or die $!;
+
+    my $fields = Dpkg::Control::Changelog->new();
+    $fields->parse(\*P, "output of stunt changelog parser");
+
+    close P or die "$! $?";
+
+    return $fields;
+}
index 2e0360da112c2793532d752ff1bfc6944d782490..c45b12465f462721bec1245d6729b888359afa5d 100755 (executable)
 # sys     0m0.012s
 # $
 
+my $infile = "debian/changelog";
+
+if (@ARGV && $ARGV[0] =~ s/^-l//) {
+    $infile = shift @ARGV;
+}
+
 die if @ARGV;
 
 use strict;
-open C, "debian/changelog" or die $!;
+open C, $infile or die $!;
 
 $!=0; $_ = <C>;
 m/^(\S+) \(([^()]+)\) (\S+)\; urgency=(\S+)$/ or die "$!, $_ ?";