chiark / gitweb /
Copyright: Add notices to some more of the (larger) files
[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 $SIG{__WARN__} = sub { die $_[0]; }; # no use of system, so we avoid #793471
18
19 my $infile = "debian/changelog";
20
21 my @orgargv = @ARGV;
22
23 if (@ARGV && $ARGV[0] =~ s/^-l//) {
24     $infile = shift @ARGV;
25 }
26
27 if (@ARGV) {
28     my $strip = $0;
29     $strip =~ s#/[^/]+$## or die "$0 ?";
30     foreach my $k (qw(PATH PERLLIB)) {
31         my @opath = split /\:/, $ENV{$k};
32         my @npath = grep { $_ ne $strip } @opath;
33         @npath != @opath  or die "$0 $k $ENV{$k} ?";
34         $ENV{$k} = join ':', @npath;
35     }
36     die if $ENV{'DGIT_NO_TSTUNT_CLPARSE'}++;
37     exec 'dpkg-parsechangelog', @orgargv;
38 }
39
40 use strict;
41 open C, $infile or die $!;
42
43 $!=0; $_ = <C>;
44 m/^(\S+) \(([^()]+)\) (\S+)\; urgency=(\S+)$/ or die "$!, $_ ?";
45 print <<END or die $!;
46 Source: $1
47 Version: $2
48 Distribution: $3
49 Urgency: $4
50 Changes: 
51  $&
52 END
53
54 my $blanks = 0;
55 for (;;) {
56     $!=0; $_ = <C>;
57     if (m/^ -- ([^<>]+\<\S+\>)  (\w[^<>]+\w)$/) {
58         print <<END or die $!;
59 Maintainer: $1
60 Date: $2
61 END
62         last;
63     } elsif (m/^ --\s*$/) {
64         last;
65     } elsif (!m/\S/) {
66         $blanks++;
67     } elsif (m/^  .*\n/) {
68         print " .\n" x $blanks or die $!;
69         $blanks=0;
70         print " $_" or die $!;
71     } else {
72         die "$!, $_ ?";
73     }
74 }