chiark / gitweb /
Move AFE-related programs into a separate directory.
[bin.git] / verify-status.pl
1 #! /usr/bin/perl -w
2 use diagnostics;
3 use strict;
4
5 my $verbose = 0;
6
7 while (@ARGV) {
8         my $arg = shift;
9         if ($arg eq '-v' or $arg eq '--verbose') {
10                 $verbose = 1;
11         } else {
12                 warn "Unrecognized option: $arg\n";
13         }
14 }
15
16 local (*AVAILABLE, *STATUS);
17 open AVAILABLE, '</var/lib/dpkg/available' or
18         die "Can't open available file: $!";
19 open STATUS, '</var/lib/dpkg/status' or die "Can't open status file: $!";
20
21 my (%available, %status);
22 my $package;
23
24 while (<AVAILABLE>)
25 {
26         if (/^Package: (.*)/)
27         {
28                 $package = $1;
29         }
30         elsif (/^Version: (.*)/)
31         {
32                 $available{$package} = $1;
33                 undef $package;
34         }
35 }
36
37 while (<STATUS>)
38 {
39         if (/^Package: (.*)/)
40         {
41                 $package = $1;
42         }
43         elsif (/^Version: (.*)/)
44         {
45                 $status{$package} = $1;
46                 undef $package;
47         }
48 }
49
50 close STATUS;
51 close AVAILABLE;
52
53 foreach my $package (sort keys %available)
54 {
55         my ($av, $st) = ($available{$package}, $status{$package});
56         if (defined $st)
57         {
58                 if ($av ne $st) {
59                         print "!!! $package $av $st\n";
60                 } elsif ($verbose) {
61                         print "$package $av $st\n";
62                 }
63         }
64 }
65