chiark / gitweb /
c45b12465f462721bec1245d6729b888359afa5d
[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 my $infile = "debian/changelog";
18
19 if (@ARGV && $ARGV[0] =~ s/^-l//) {
20     $infile = shift @ARGV;
21 }
22
23 die if @ARGV;
24
25 use strict;
26 open C, $infile or die $!;
27
28 $!=0; $_ = <C>;
29 m/^(\S+) \(([^()]+)\) (\S+)\; urgency=(\S+)$/ or die "$!, $_ ?";
30 print <<END or die $!;
31 Source: $1
32 Version: $2
33 Distribution: $3
34 Urgency: $4
35 Changes: 
36  $&
37 END
38
39 my $blanks = 0;
40 for (;;) {
41     $!=0; $_ = <C>;
42     if (m/^ -- ([^<>]+\<\S+\>)  (\w[^<>]+\w)$/) {
43         print <<END or die $!;
44 Maintainer: $1
45 Date: $2
46 END
47         last;
48     } elsif (m/^ --\s*$/) {
49         last;
50     } elsif (!m/\S/) {
51         $blanks++;
52     } elsif (m/^  .*\n/) {
53         print " .\n" x $blanks or die $!;
54         $blanks=0;
55         print " $_" or die $!;
56     } else {
57         die "$!, $_ ?";
58     }
59 }