chiark / gitweb /
Test suite: Use stunt dpkg-parsechangelog
[dgit.git] / tests / tstunt / dpkg-parsechangelog
1 #!/usr/bin/perl -w
2 #
3 # In an example:
4 #
5 # $ time dpkg-parsechangelog >/dev/null
6 #
7 # real    0m0.712s
8 # user    0m0.656s
9 # sys     0m0.048s
10 # $ time ~/things/Dgit/dgit/tests/tstunt/dpkg-parsechangelog >/dev/null
11 #
12 # real    0m0.016s
13 # user    0m0.000s
14 # sys     0m0.012s
15 # $
16
17 die if @ARGV;
18
19 use strict;
20 open C, "debian/changelog" or die $!;
21
22 $!=0; $_ = <C>;
23 m/^(\S+) \(([^()]+)\) (\S+)\; urgency=(\S+)$/ or die "$!, $_ ?";
24 print <<END or die $!;
25 Source: $1
26 Version: $2
27 Distribution: $3
28 Urgency: $4
29 Changes: 
30  $&
31 END
32
33 my $blanks = 0;
34 for (;;) {
35     $!=0; $_ = <C>;
36     if (m/^ -- ([^<>]+\<\S+\>)  (\w[^<>]+\w)$/) {
37         print <<END or die $!;
38 Maintainer: $1
39 Date: $2
40 END
41         last;
42     } elsif (m/^ --\s*$/) {
43         last;
44     } elsif (!m/\S/) {
45         $blanks++;
46     } elsif (m/^  .*\n/) {
47         print " .\n" x $blanks or die $!;
48         $blanks=0;
49         print " $_" or die $!;
50     } else {
51         die "$!, $_ ?";
52     }
53 }