Move the counts around a bit.
[bugscan.git] / bugdiff
diff --git a/bugdiff b/bugdiff
index 33cc562..a4816bf 100755 (executable)
--- a/bugdiff
+++ b/bugdiff
@@ -6,10 +6,13 @@
 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";
@@ -36,20 +39,20 @@ sub closedbugs() {
                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";
                }
        }
@@ -61,10 +64,10 @@ sub openedbugs() {
                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";
                        }
@@ -72,15 +75,17 @@ sub openedbugs() {
                }
        } 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";
@@ -90,39 +95,41 @@ sub statistics() {
        }
 }
 
+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);
 
 scanlib::readstatus($ARGV[0]);
-%oldbugs=%packagelist;
-%packagelist=();
+my %oldbugs=%scanlib::packagelist;
+%scanlib::packagelist=();
 
 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;
+