extras-repoclosure rc-report.py,1.66,1.67

Michael Schwendt mschwendt at fedoraproject.org
Mon Sep 13 11:55:02 UTC 2010


Author: mschwendt

Update of /cvs/fedora/extras-repoclosure
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv18766

Modified Files:
	rc-report.py 
Log Message:
use BrokenDeps module and minor changes


Index: rc-report.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-report.py,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -r1.66 -r1.67
--- rc-report.py	24 Aug 2009 17:50:30 -0000	1.66
+++ rc-report.py	13 Sep 2010 11:55:02 -0000	1.67
@@ -1,14 +1,14 @@
 #!/usr/bin/python
 # -*- mode: Python; indent-tabs-mode: nil; -*-
+# License: GPLv2+
 
 import errno, os, sys, stat
-import re
 import datetime, time
-import rpmUtils.miscutils
 from optparse import OptionParser
 import ConfigParser
 import Mailer, smtplib
 
+import BrokenDeps
 from PackageOwners import PackageOwners
 #from FakeOwners import FakeOwners as PackageOwners
 
@@ -30,30 +30,6 @@
     'subject' : "Broken dependencies in EPEL",
 }
 
-class BrokenDep:
-    def __init__(self):
-        self.pkgid = None  # 'E:name-VR.arch' (previously: 'name-EVR.arch')
-        self.repoid = None  # e.g. 'fedora-core-6-i386'
-        self.name = None  # just the binary rpm %{name}
-        self.srpm_name = None
-        self.owner = ''
-        self.coowners = []
-        self.relatedpkgs = []
-        self.relatedowners = []
-        # disabled/stripped feature
-        self.mail = True  # whether to notify owner by mail
-        # disabled/stripped feature
-        self.new = False
-        self.report = []
-
-    def GetRequires(self):
-        r = []
-        for line in self.report:
-            if len(line) and not line.isspace() and not line.startswith('package: ') and line.find('unresolved deps:') < 0:
-                r.append( '    '+self.pkgid+'  requires  '+line.lstrip() )
-        return '\n'.join(r)
-
-
 def whiteListed(b): # Just a hook, not a generic white-list feature.
     if b.name.startswith('kmod'):  # gah ;)  temporarily catch them all
         return True
@@ -63,9 +39,16 @@
 
 def noMailWhiteList(b):
     if b.name.startswith('llvm-devel') and b.repoid.startswith('fedora-10-ppc'):
-        return True
+        return "WONTFIX"
+    # multiarch repo breakage
+    elif b.srpm_name == 'perl' and b.repoid.startswith('fedora') and (b.repoid.find('12')>0 or b.repoid.find('13')>0) and BrokenDeps.GetRequires(b).find('requires  perl ='):
+        return "ignored, multiarch breakage"
+    # multiarch repo breakage (so far just F-13 and above)
+    # releng #4084
+    elif b.name == 'gcc-gfortran' and b.repoid.startswith('fedora'):
+        return "ignored, releng #4084"
     else:
-        return False
+        return None
 
 
 def makeOwners(brokendeps,fedora=False):
@@ -183,114 +166,41 @@
 if not len(args):
     print usage
     sys.exit(errno.EINVAL)
-# Parse extras-repoclosure output files and fill brokendeps array.
+
 while len(args):
     logfilename = args[0]
     del args[0]
 
     f = file( logfilename )
-    pkgre = re.compile('(?P<name>.*)-[^-]+-[^-]+$')
-    inbody = 0
-    srcrpm = ''
-    for line in f:
-        if line.startswith('source rpm: '):
-            w = line.rstrip().split(' ')
-            srcrpm = w[2]
-            res = pkgre.search( srcrpm )  # try to get src.rpm "name"
-            if not res:  # only true for invalid input
-                inbody = 0
-            else:
-                srpm_name = res.group('name')
-            continue
-
-        elif line.startswith('package: '):
-            inbody = 1
-            b = BrokenDep()
-            w = line.rstrip().split(' ')
-            if len(w)==6:
-                b.repoid = w[5]
-                b.pkgid = w[1]+' - '+w[3]  # name - EVR.arch
-                b.pkgid = b.pkgid.replace(' ','')
-            else:
-                b.repoid = w[3]
-                b.pkgid = w[1]  # E:name-VR.arch
-            b.srpm_name = srpm_name
-            # Extract pkg name from pkgid.
-            b.name = rpmUtils.miscutils.splitFilename(b.pkgid)[0]
-            brokendeps.append(b)
-
-        if inbody == 1:
-            if line.startswith('related pkgs:'):
-                inbody = 2
-                continue
-            else:
-                # Copy report per broken package.
-                r = line.rstrip()
-                if len(r)>0:
-                    b.report.append( r )
-
-        elif inbody == 2:
-            n = line.lstrip().rstrip()
-            if len(n) and n!=srpm_name:
-                b.relatedpkgs.append(n)
-
-
-def bdSortBySrcName(a,b):
-    return cmp(a.srpm_name.lower(),b.srpm_name.lower())
-
-def bdSortByOwnerAndName(a,b):
-    r = cmp(a.owner,b.owner)
-    if r==0:  # equal?
-        return cmp(a.pkgid,b.pkgid)
-    else:
-        return r
-
-def bdSortByRepoAndName(a,b):
-    r = cmp(a.repoid,b.repoid)
-    if r==0:  # equal?
-        return cmp(a.pkgid,b.pkgid)
-    else:
-        return r
-
-
-# Filter out unwanted repoids.
-for b in list(brokendeps):
-    for needle in opts.keyword:
-        if b.repoid.find( needle ) >= 0:  # wanted?
-            break
-    else:
-        brokendeps.remove(b)
+    lines = f.readlines()
+    f.close()
+    brokendeps += BrokenDeps.Parser(lines)
 
-# Filter out entries from whitelist.
-for b in list(brokendeps):
-    if whiteListed(b):
-        brokendeps.remove(b)
+BrokenDeps.DropUnwantedRepos(brokendeps,opts.keyword)
+BrokenDeps.DropWhiteListed(brokendeps,whiteListed)
 
 # Fill in package owners.
 if not opts.noowners:
     makeOwners(brokendeps,opts.fedora)
 
-# Build full mail report per owner. Use a flag for new breakage.
-reports = {}  # map of lists [new,body] - a flag and the full report for a package owner
+# Build full mail report per owner.
+reports = {}  # map of strings - full report for a package owner
 if not opts.noowners:
-    brokendeps.sort(bdSortByOwnerAndName)
+    brokendeps.sort(BrokenDeps.SortByOwnerAndName)
     for b in brokendeps:
         if noMailWhiteList(b):
             continue
-        if b.new:
-            print 'NEW breakage: %s in %s' % (b.pkgid, b.repoid)
-        if b.mail:
-            r = '\n'.join(b.report)+'\n\n'
-            reports.setdefault(b.owner,[b.new,''])
-            reports[b.owner][1] += r
-            # Also build mails for co-owners.
-            for toaddr in b.coowners:
-                reports.setdefault(toaddr,[None,''])
-                reports[toaddr][1] += r
-            # Also build mails for related pkg owners.
-            for toaddr in b.relatedowners:
-                reports.setdefault(toaddr,[None,''])
-                reports[toaddr][1] += r
+        r = '\n'.join(b.report)+'\n\n'
+        reports.setdefault(b.owner,'')
+        reports[b.owner] += r
+        # Also build mails for co-owners.
+        for toaddr in b.coowners:
+            reports.setdefault(toaddr,'')
+            reports[toaddr] += r
+        # Also build mails for related pkg owners.
+        for toaddr in b.relatedowners:
+            reports.setdefault(toaddr,'')
+            reports[toaddr] += r
 
 
 sep = '='*70+'\n'
@@ -314,9 +224,9 @@
 reportssummary += giveTestingMsg()
 summail += reportssummary
 
-if not opts.noowners and len(brokendeps):
+if len(brokendeps):
     summail += ('Summary of broken packages (by src.rpm name):\n\n')
-    brokendeps.sort(bdSortBySrcName)
+    brokendeps.sort(BrokenDeps.SortBySourceName)
     seenbefore = []
     for b in brokendeps:
         if b.srpm_name not in seenbefore:
@@ -340,7 +250,7 @@
 
 if not opts.noowners and not opts.fedora and len(brokendeps):
     summail += ('Summary of broken packages (by primary owner):\n')
-    brokendeps.sort(bdSortByOwnerAndName)
+    brokendeps.sort(BrokenDeps.SortByOwnerAndName)
     seenbefore = []
     o = None
     for b in brokendeps:
@@ -363,13 +273,13 @@
             seenbefore.append(b.srpm_name)
 
 # Broken deps sorted by repository id.
-brokendeps.sort(bdSortByRepoAndName)
+brokendeps.sort(BrokenDeps.SortByRepoAndName)
 r = None
 for b in brokendeps:
     if r != b.repoid:
         r = b.repoid
         summail += '\n\n'+sep+('Broken packages in %s:\n\n' % b.repoid)
-    summail += b.GetRequires()+'\n'
+    summail += BrokenDeps.GetRequires(b)+'\n'
 
 # Mail init.
 if domail:
@@ -381,7 +291,7 @@
         sys.exit(-1)
 
 # Mail reports to owners.
-for toaddr,(new,body) in reports.iteritems():
+for toaddr,body in reports.iteritems():
     # Send mail to every package owner with broken package dependencies.
     mailtext = 'The following packages in the repository suffer from broken dependencies:\n\n'
     mailtext += giveNeedsignMsg()



More information about the scm-commits mailing list