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