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