#!/usr/bin/perl
-# vim: ts=4 sw=4 nowrap
+# vim: ts=8 sw=8 nowrap
# Compare two buglist status-files
use Getopt::Std;
require scanlib;
require bugcfg;
+use strict;
+use warnings;
-$Version = "BugDiff 1.0\nCopyright (C) Wichert Akkerman <wakkerma\@debian.org>\n";
-$html = 0;
+my $Version = "BugDiff 1.0\nCopyright (C) Wichert Akkerman <wakkerma\@debian.org>\n";
+my $html = 0;
+my (%removed, %new);
sub ShowVersion() {
print "$Version\n";
if (%removed) {
print "<h2>Closed/downgraded release-critical bugs</h2>\n";
print "<ul>\n";
- for $p (sort keys %removed) {
- print " <li><em>" . &wwwname($p) . ":</em>\n";
- for $b (sort split(/ /, $removed{$p})) {
- print &wwwnumber($b) . " ";
+ for my $p (sort keys %removed) {
+ print " <li><em>" . &scanlib::wwwname($p) . ":</em>\n";
+ for $b (sort @{$removed{$p}}) {
+ print &scanlib::wwwnumber($b) . " ";
}
print "\n";
}
print "</ul>\n";
}
} else {
- print "Closed/downgraded release-critical bugs:\n" if (%removed>0);
- for $p (sort keys %removed) {
+ print "Closed/downgraded release-critical bugs:\n" if (scalar keys %removed>0);
+ for my $p (sort keys %removed) {
print " $p: ";
- print join(", ", sort split(/ /, $removed{$p}));
+ print join(", ", sort @{$removed{$p}});
print "\n";
}
}
if (%new) {
print "<h2>Opened/upgraded release-critical bugs</h2>\n";
print "<ul>\n";
- for $p (sort keys %new) {
- print " <li><em>" . &wwwname($p) . ":</em>\n";
- for $b (sort split(/ /, $new{$p})) {
- print &wwwnumber($b) . " ";
+ for my $p (sort keys %new) {
+ print " <li><em>" . &scanlib::wwwname($p) . ":</em>\n";
+ for $b (sort @{$new{$p}}) {
+ print &scanlib::wwwnumber($b) . " ";
}
print "\n";
}
}
} else {
print "Opened/upgraded release-critical bugs:\n" if (%new);
- for $p (sort keys %new) {
+ for my $p (sort keys %new) {
print " $p: ";
- print join(", ", sort split(/ /, $new{$p}));
+ print join(", ", sort @{$new{$p}});
print "\n";
}
}
}
-sub statistics() {
+sub statistics($$) {
+ my ($opened, $closed) = @_;
+
if ($html) {
print "<STRONG>" . ($closed ? $closed : "NO") . "</STRONG> release-critical bugs were closed and ";
print "<STRONG>" . ($opened ? $opened : "NONE") . "</STRONG> were opened.<P>\n";
}
}
+our ($opt_V, $opt_h, $opt_H, $opt_n, $opt_c, $opt_s);
getopts('VhHncs');
ShowUsage if ($opt_h or ($#ARGV != 1));
ShowVersion if ($opt_V);
$html=1 if ($opt_H);
-&readstatus($ARGV[0]);
-%oldbugs=%packagelist;
-%packagelist=();
+scanlib::readstatus($ARGV[0]);
+my %oldbugs=%scanlib::packagelist;
+%scanlib::packagelist=();
-&readstatus($ARGV[1]);
+scanlib::readstatus($ARGV[1]);
-$closed=0;
-for $p (keys %oldbugs) {
- for $b (split(/ /, $oldbugs{$p})) {
- if (not ($packagelist{$p} =~ m/\b$b\b/)) {
- $removed{$p} .= "$b ";
+my $closed=0;
+for my $p (keys %oldbugs) {
+ for $b (@{$oldbugs{$p}}) {
+ if (!defined($scanlib::packagelist{$p}) || scalar grep { $_ == $b } @{$scanlib::packagelist{$p}} == 0) {
+ push @{$removed{$p}}, $b;
$closed++;
}
}
}
-$opened=0;
-for $p (keys %packagelist) {
- for $b (split(/ /, $packagelist{$p})) {
- if (not ($oldbugs{$p} =~ m/\b$b\b/)) {
- $new{$p} .= "$b ";
+my $opened=0;
+for my $p (keys %scanlib::packagelist) {
+ for $b (@{$scanlib::packagelist{$p}}) {
+ if (!defined($oldbugs{$p}) || scalar grep { $_ == $b } @{$oldbugs{$p}} == 0) {
+ push @{$new{$p}}, $b;
$opened++;
}
}
}
-statistics if ($opt_s);
+statistics($opened, $closed) if ($opt_s);
closedbugs if ($opt_c);
openedbugs if ($opt_n);
exit 0;
+