chiark / gitweb /
Move most .pl scripts to names without extensions. Drop ssize.pl, which I
[bin.git] / verify-status
diff --git a/verify-status b/verify-status
new file mode 100755 (executable)
index 0000000..e3faa0c
--- /dev/null
@@ -0,0 +1,65 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+
+my $verbose = 0;
+
+while (@ARGV) {
+       my $arg = shift;
+       if ($arg eq '-v' or $arg eq '--verbose') {
+               $verbose = 1;
+       } else {
+               warn "Unrecognized option: $arg\n";
+       }
+}
+
+local (*AVAILABLE, *STATUS);
+open AVAILABLE, '</var/lib/dpkg/available' or
+       die "Can't open available file: $!";
+open STATUS, '</var/lib/dpkg/status' or die "Can't open status file: $!";
+
+my (%available, %status);
+my $package;
+
+while (<AVAILABLE>)
+{
+       if (/^Package: (.*)/)
+       {
+               $package = $1;
+       }
+       elsif (/^Version: (.*)/)
+       {
+               $available{$package} = $1;
+               undef $package;
+       }
+}
+
+while (<STATUS>)
+{
+       if (/^Package: (.*)/)
+       {
+               $package = $1;
+       }
+       elsif (/^Version: (.*)/)
+       {
+               $status{$package} = $1;
+               undef $package;
+       }
+}
+
+close STATUS;
+close AVAILABLE;
+
+foreach my $package (sort keys %available)
+{
+       my ($av, $st) = ($available{$package}, $status{$package});
+       if (defined $st)
+       {
+               if ($av ne $st) {
+                       print "!!! $package $av $st\n";
+               } elsif ($verbose) {
+                       print "$package $av $st\n";
+               }
+       }
+}
+