#!/usr/bin/perl # vim: ts=8 sw=8 nowrap # Compare two buglist status-files use Getopt::Std; require scanlib; require bugcfg; use strict; use warnings; my $Version = "BugDiff 1.0\nCopyright (C) Wichert Akkerman \n"; my $html = 0; my (%removed, %new); sub ShowVersion() { print "$Version\n"; exit 0; } sub ShowUsage() { print < Options: -V show version -h show some (hopefully) helpfull information -H produce HTML output -n list newly opened bugs -c list closed bugs -s show statistics EOF exit 0; } sub closedbugs() { if ($html) { if (%removed) { print "

Closed/downgraded release-critical bugs

\n"; print "
    \n"; for my $p (sort keys %removed) { print "
  • " . &scanlib::wwwname($p) . ":\n"; for $b (sort @{$removed{$p}}) { print &scanlib::wwwnumber($b) . " "; } print "\n"; } print "
\n"; } } else { print "Closed/downgraded release-critical bugs:\n" if (scalar keys %removed>0); for my $p (sort keys %removed) { print " $p: "; print join(", ", sort @{$removed{$p}}); print "\n"; } } } sub openedbugs() { if ($html) { if (%new) { print "

Opened/upgraded release-critical bugs

\n"; print "
    \n"; for my $p (sort keys %new) { print "
  • " . &scanlib::wwwname($p) . ":\n"; for $b (sort @{$new{$p}}) { print &scanlib::wwwnumber($b) . " "; } print "\n"; } print "
\n"; } } else { print "Opened/upgraded release-critical bugs:\n" if (%new); for my $p (sort keys %new) { print " $p: "; print join(", ", sort @{$new{$p}}); print "\n"; } } } sub statistics($$) { my ($opened, $closed) = @_; if ($html) { print "" . ($closed ? $closed : "NO") . " release-critical bugs were closed and "; print "" . ($opened ? $opened : "NONE") . " were opened.

\n"; } else { print "" . ($closed ? $closed : "NO") . " release-critical bugs were closed "; print "and " . ($opened ? $opened : "NONE") . " were opened.\n\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); scanlib::readstatus($ARGV[0]); my %oldbugs=%scanlib::packagelist; %scanlib::packagelist=(); scanlib::readstatus($ARGV[1]); 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++; } } } 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($opened, $closed) if ($opt_s); closedbugs if ($opt_c); openedbugs if ($opt_n); exit 0;