status-report-scripts parseBZbugList,1.1.1.1,1.2
Christian Iseli (c4chris)
fedora-extras-commits at redhat.com
Wed Apr 19 09:49:12 UTC 2006
Author: c4chris
Update of /cvs/fedora/status-report-scripts
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1284
Modified Files:
parseBZbugList
Log Message:
Parse wget output, parse all blockers, improve things...
Index: parseBZbugList
===================================================================
RCS file: /cvs/fedora/status-report-scripts/parseBZbugList,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- parseBZbugList 19 Apr 2006 09:34:07 -0000 1.1.1.1
+++ parseBZbugList 19 Apr 2006 09:49:09 -0000 1.2
@@ -2,9 +2,10 @@
# $Id$
use strict;
use Getopt::Long;
+use Date::Manip;
my %opt;
-my @options = ( "help", "srpms=s@", "bzid=s" );
+my @options = ( "help", "core=s", "extras=s", "bzid=s", "o=s" );
if( ! GetOptions( \%opt, @options ) ) { &usage(); }
@@ -12,12 +13,16 @@
&usage() if defined $opt{'help'};
- at main::srpm = @{$opt{"srpms"}} if defined $opt{"srpms"};
-
-my $ACCEPT = 163779;
-my %BZ;
+my $FE_NEW = 163776;
+my $FE_REVIEW = 163778;
+my $FE_ACCEPT = 163779;
+my %BZN;
+my %BZR;
+my %BZA;
+my %CORE;
my %SRPMS;
my %NAME;
+my %OWN;
if (defined $opt{"bzid"}) {
local *IN;
open IN, $opt{"bzid"} or die "Couldn't open $opt{'bzid'} : $!";
@@ -28,19 +33,26 @@
}
close IN;
}
-if ($#main::srpm >= 0) {
- foreach my $f (@main::srpm) {
- local *IN;
- open IN, $f or die "Couldn't open $f : $!";
- while ( <IN> ) {
- next unless /^\[ \] (\S+)/;
- my $file = $1;
- my ($pkg) = $file =~ /^(.*)-[^-]+-[^-]+\.src\.rpm/;
- die "Bad file: $file" if $pkg eq "";
- $SRPMS{$pkg} = 1;
- }
- close IN;
+if (defined $opt{"o"}) {
+ local *IN;
+ open IN, $opt{"o"} or die "Couldn't open $opt{'o'} : $!";
+ # Fedora Extras|aalib|An ASCII art library|anvil at livna.org|extras-qa at fedoraproject.org|
+ while ( <IN> ) {
+ next if /^#/;
+ s/\s+$//;
+ my @F = split /\|/;
+ $OWN{$F[1]} = \@F;
}
+ close IN;
+}
+if (defined $opt{"extras"}) {
+ &grabRepoList($opt{"extras"}, \%SRPMS);
+}
+if (defined $opt{"core"}) {
+ &grabRepoList($opt{"core"}, \%CORE);
+}
+foreach my $k (keys %CORE) {
+ $SRPMS{$k} = 1;
}
while ( <> ) {
s/[,\n]+$//;
@@ -72,12 +84,11 @@
next;
}
$F[7] =~ s/["{}]//g;
+ $F[1] =~ s/["]//g;
+ $F[2] =~ s/["]//g;
+ $F[1] = ParseDate($F[1]);
+ $F[2] = ParseDate($F[2]);
my @B = split /,/, $F[7];
- my $block = 0;
- foreach my $b (@B) {
- $block = 1 if $b == $ACCEPT;
- }
- next if $block == 0;
next if $F[8] =~ /TESTING-BUGSPAM/;
if (defined $NAME{$F[0]}) {
$F[8] = $NAME{$F[0]};
@@ -87,79 +98,156 @@
$F[8] =~ s/^review\s+request:?\s+<?//i;
$F[8] =~ s/[:.,>]?\s.*$//g;
}
- $BZ{$F[0]} = \@F;
+ my $block = 0;
+ my $bzb;
+ foreach my $b (@B) {
+ if ($b == $FE_NEW) {
+ $block += 1;
+ $bzb = \%BZN;
+ }
+ if ($b == $FE_REVIEW) {
+ $block += 1;
+ $bzb = \%BZR;
+ }
+ if ($b == $FE_ACCEPT) {
+ $block += 1;
+ $bzb = \%BZA;
+ }
+ }
+ if ($block > 1) {
+ print "Warning: bug $F[0] blocks several FE_ blockers.\n";
+ next;
+ }
+ $bzb->{$F[0]} = \@F if $block == 1;
}
-&checkClosed();
-&checkOpen();
+print "=== About owners file ===\n\n";
+&checkOwners;
+print "\n\n=== About FE-ACCEPT packages ===\n";
+&checkAcceptClosed(\%BZA);
+&checkAcceptOpen(\%BZA);
+print "\n\n=== About FE-NEW packages ===\n";
+&checkNotClosed(\%BZN, "FE-NEW");
+print "\n\n=== About FE-REVIEW packages ===\n";
+&checkNotClosed(\%BZR, "FE-REVIEW");
exit 0;
-sub checkClosed {
+sub checkOwners {
+ my %O;
+ my $orphan = 0;
+ my $cnt = 0;
+ foreach my $k (keys %OWN) {
+ my $a = $OWN{$k};
+ next if $$a[0] ne "Fedora Extras";
+ $cnt += 1;
+ if ($$a[3] eq 'extras-orphan at fedoraproject.org') {
+ $orphan += 1;
+ next;
+ }
+ $O{$$a[3]} += 1;
+ }
+ print "We have $cnt extras packages in owners file.\n";
+ print "There are $orphan orphans.\n";
+ my @TO = sort {$O{$b} <=> $O{$a}} keys %O;
+ print "\nTop 10 package owners:\n";
+ for my $i (0 .. 9) {
+ my $n = $TO[$i];
+ $n =~ s/\@/ at /;
+ $n =~ s/\./ dot /g;
+ printf "%-50s: %d\n", $n, $O{$TO[$i]};
+ }
+}
+
+sub checkAcceptClosed {
+ my ($BZ) = @_;
my @BL;
+ my @BLO;
my %O;
my %R;
my $cnt = 0;
my $miss = 0;
- foreach my $b (sort(keys %BZ)) {
- my $a = $BZ{$b};
+ my $missO = 0;
+ foreach my $b (sort(keys %$BZ)) {
+ my $a = $BZ->{$b};
next unless $$a[5] eq "\"CLOSED\"";
my $pkg = $$a[8];
- unless ($SRPMS{$pkg} == 1) {
+ unless ($SRPMS{$pkg} == 1 || defined($OWN{$pkg})) {
$pkg =~ s/-[^-]+-[^-]+$//;
}
- unless ($SRPMS{$pkg} == 1) {
+ unless ($SRPMS{$pkg} == 1 || defined($OWN{$pkg})) {
$pkg = $$a[8];
$pkg =~ s/-[^-]+$//;
}
- unless ($SRPMS{$pkg} == 1) {
+ unless ($SRPMS{$pkg} == 1 || defined($OWN{$pkg})) {
$pkg = lc $$a[8];
- unless ($SRPMS{$pkg} == 1) {
+ unless ($SRPMS{$pkg} == 1 || defined($OWN{$pkg})) {
$pkg =~ s/-[^-]+-[^-]+$//;
}
}
- unless ($SRPMS{$pkg} == 1) {
+ unless ($SRPMS{$pkg} == 1 || defined($OWN{$pkg})) {
$pkg = lcfirst $$a[8];
}
if ($SRPMS{$pkg} == 1) {
$R{$$a[3]} += 1;
$O{$$a[4]} += 1;
$cnt += 1;
+ if (!defined($CORE{$pkg}) && !defined($OWN{$pkg})) {
+ push @BLO, $b;
+ $missO += 1;
+ }
} else {
# print "Missing pkg: ", join(" ", @$a), "\n";
push @BL, $b;
$miss += 1;
+ if (defined $OWN{$pkg}) {
+ $R{$$a[3]} += 1;
+ $O{$$a[4]} += 1;
+ $cnt += 1;
+ } else {
+ push @BLO, $b;
+ $missO += 1;
+ }
}
}
- print "\nWe have $miss accepted, closed packages where I'm unable to find
+ if ($miss > 0) {
+ print "\nWe have $miss accepted, closed packages where I'm unable to find
the package in the development repo:\n\n";
- print "https://bugzilla.redhat.com/bugzilla/buglist.cgi?bug_id=",
- join(",", @BL), "\n";
+ print "https://bugzilla.redhat.com/bugzilla/buglist.cgi?bug_id=",
+ join(",", @BL), "\n";
+ }
+ if ($missO > 0) {
+ print "\nWe have $missO accepted, closed packages where I'm unable to find
+the package in the owners file:\n\n";
+ print "https://bugzilla.redhat.com/bugzilla/buglist.cgi?bug_id=",
+ join(",", @BLO), "\n";
+ }
my @TR = sort {$R{$b} <=> $R{$a}} keys %R;
my @TO = sort {$O{$b} <=> $O{$a}} keys %O;
print "\nWe have $cnt accepted, closed package reviews\n";
- print "\nTop 10 packagers:\n";
+ print "\nTop 10 BZ review requests submitters:\n";
for my $i (0 .. 9) {
my $n = $TO[$i];
$n =~ s/["]//g;
$n =~ s/\@/ at /;
- $n =~ s/\./ dot /;
- printf "%-40s: %d\n", $n, $O{$TO[$i]};
+ $n =~ s/\./ dot /g;
+ printf "%-50s: %d\n", $n, $O{$TO[$i]};
}
- print "\nTop 10 reviewers:\n";
+ print "\nTop 10 BZ review requests reviewers:\n";
for my $i (0 .. 9) {
my $n = $TR[$i];
$n =~ s/["]//g;
$n =~ s/\@/ at /;
- $n =~ s/\./ dot /;
- printf "%-40s: %d\n", $n, $R{$TR[$i]};
+ $n =~ s/\./ dot /g;
+ printf "%-50s: %d\n", $n, $R{$TR[$i]};
}
}
-sub checkOpen {
+sub checkAcceptOpen {
+ my ($BZ) = @_;
my @BL;
my $cnt = 0;
- foreach my $b (sort(keys %BZ)) {
- my $a = $BZ{$b};
+ foreach my $b (sort(keys %$BZ)) {
+ my $a = $BZ->{$b};
next if $$a[5] eq "\"CLOSED\"";
my $pkg = $$a[8];
unless ($SRPMS{$pkg} == 1) {
@@ -180,6 +268,21 @@
join(",", @BL), "\n";
}
+sub checkNotClosed {
+ my ($BZ, $cur) = @_;
+ my @BL;
+ foreach my $b (sort(keys %$BZ)) {
+ my $a = $BZ->{$b};
+ next unless $$a[5] eq "\"CLOSED\"";
+ push @BL, $b;
+ }
+ return if $#BL < 0;
+ my $cnt = $#BL + 1;
+ print "\nWe have $cnt closed tickets still blocking $cur\n";
+ print "https://bugzilla.redhat.com/bugzilla/buglist.cgi?bug_id=",
+ join(",", @BL), "\n";
+}
+
sub usage {
print STDERR "Usage: $0 [options] <bugs list>
where options are:
@@ -188,3 +291,17 @@
-srpms <file> list of SRPMS\n";
exit 1;
}
+
+sub grabRepoList {
+ my ($f, $h) = @_;
+ local *IN;
+ open IN, "wget -nv -O - $f|" or die "Failed to wget $f : $!";
+ while ( <IN> ) {
+ next unless /^<img \S+ alt=.\[ \].> <a href=.([^"]+)/;
+ my $file = $1;
+ my ($pkg) = $file =~ /^(.*)-[^-]+-[^-]+\.src\.rpm/;
+ die "Bad file: $file" if $pkg eq "";
+ $h->{$pkg} = 1;
+ }
+ close IN;
+}
More information about the fedora-extras-commits
mailing list