1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#!/usr/bin/perl
use strict;
use warnings;
use File::Slurp;
my @dirs = @ARGV;
unless (@dirs) {
@dirs = glob 'p/*/';
}
my %plan;
open PLAN, '<', '../package-plan/packages.txt' or die @!;
while (<PLAN>) {
chomp;
next if /^#/;
next if /^\s*$/;
unless (m/^(.*?) (.*?)(?: ([^#]*))?(?:#.*)?$/) {
print "Ignoring unparseable line $.: $_\n";
}
my ($pkg,$version,$attribs) = ($1,$2,$3);
$plan{$pkg} = $version;
}
close PLAN or die @!;
for my $dir (@dirs) {
my $changelog = "$dir/debian/changelog";
my $watchfile = "$dir/debian/watch";
next unless -r $changelog;
next unless -r $watchfile;
open CHANGELOG, '<', $changelog or die @!;
my $firstline = <CHANGELOG>;
if ($firstline =~ m/([\w-]+) \(([\w:~.+-]+)\) (\w+);/) {
my ($source, $version, $suite) = ($1, $2, $3);
my ($cabal_version) = ($version =~ m/^(?:.*:)?(.*?)(?:\+dfsg\d*)?-.*?$/);
my $watch = read_file($watchfile) or die @!;
unless ($watch =~ m!http://hackage.haskell.org/package/(.*)/distro-monitor!) {
#printf STDERR "Cannot parse watchfile %s\n", $watchfile;
# ignore packages with non-standard watch files
next
}
my $cabal_package = $1;
unless (exists $plan{$cabal_package}) {
printf STDERR "W: package %s not in the package plan\n",
$dir, $cabal_package;
next
}
if ($cabal_version ne $plan{$cabal_package}) {
printf "%s\n", $dir;
}
} else {
printf STDERR "Cannot parse %s:\n%s", $changelog, $firstline;
next
}
}
|