extras-repoclosure rc-report.py,1.26,1.27
Michael Schwendt (mschwendt)
fedora-extras-commits at redhat.com
Sat Dec 2 08:50:36 UTC 2006
Author: mschwendt
Update of /cvs/fedora/extras-repoclosure
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv15780
Modified Files:
rc-report.py
Log Message:
- moved/regrouped plenty of lines, so the refreshed biweekly mails are
not summed up in the big summary report as "New" anymore
- also mail co-owners (probably will cause trouble as some Cc recipients
are subscription-based mailing-lists)
Index: rc-report.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-report.py,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- rc-report.py 27 Nov 2006 23:52:20 -0000 1.26
+++ rc-report.py 2 Dec 2006 08:50:36 -0000 1.27
@@ -29,7 +29,7 @@
# Don't repeat a report for a src.rpm for 14 days.
waitdelta = datetime.timedelta( days = 14 )
-today = datetime.date.today()
+today = datetime.date.today() # +datetime.timedelta(days=15)
# Where to check out owners/owners.list
ownersworkdir = '/srv/extras-push/work'
@@ -182,12 +182,8 @@
#owners.FromCVS(workdir=ownersworkdir)
if not owners.FromURL():
sys.exit(1)
-reportssummary = ''
-summail = ''
-pkgbyowner = {} # map, pkgbyowner[email], list of pkgids for all owner's broken packages
summary = {} # map of maps, summary[repoid][pkgid], unresolved deps line by line
-report = {}
-agedict = {}
+details = {} # map of arrays [sendflag,name,srcrpmname,age,pkgid,text]
args = sys.argv[1:]
if len(args) > 2:
@@ -206,9 +202,6 @@
if not combinedreport:
mailsubject = subject + ' ' + release + ' - ' + datestring
- pkgbyowner = {}
- summary = {}
- report = {}
else:
mailsubject = subject + ' - ' + datestring
@@ -218,7 +211,6 @@
pkgre = re.compile('(?P<name>.*)-[^-]+-[^-]+$')
inbody = False
srcrpm = ''
- ownedby = ''
createreport = False
try:
f = file( logfilename )
@@ -249,46 +241,93 @@
continue
name = res.group('name')
- ownedby = owners.GetOwner(name)
- if ownedby == '':
- ownedby = 'UNKNOWN OWNER'
- x = 'ERROR: %s not in owners.list\nERROR: source rpm is %s' % ( name, srcrpm )
- reportssummary += x + '\n\n'
# name-EVR.arch
- pkgid = w[1]+'-'+w[3]
- pkgid2 = w[1]+' - '+w[3]
+ pkgid = w[1]+' - '+w[3] # package id
+ uniqueid = pkgid+repoid # unique pkg id for combined report
- agedict[pkgid2] = history.GetAge(srcrpm)
- if not pkgbyowner.has_key(ownedby):
- pkgbyowner[ownedby] = [pkgid2]
- else:
- pkgbyowner[ownedby].append(pkgid2)
+ age = history.GetAge(srcrpm) # e.g. "(4 days)"
- if not summary.has_key(repoid):
- summary[repoid] = {}
- if not summary[repoid].has_key(pkgid):
- summary[repoid][pkgid] = []
+ # Init list of broken deps per package per repository.
+ summary.setdefault(repoid,{})
+ summary[repoid].setdefault(pkgid,[])
+
+ # Create records
+ # - send-flag, name, srcrpmfilename, age, pkgid, body
+ details.setdefault(uniqueid,[createreport,name,srcrpm,age,pkgid,''])
if inbody:
- # Construct report for package owner.
- if createreport:
- try:
- report[ownedby] += line
- except KeyError:
- report[ownedby] = line
- # Add to summary.
+ # Construct report per package src.rpm-repoid.
+ # We need a few values, since a package may have different
+ # owner(s) per dist.
+ details[uniqueid][5] += line
+ # Add relevant bits to repository summary.
if not line.isspace() and not line.startswith('package: ') and line.find('unresolved deps:') < 0:
summary[repoid][pkgid].append( line.rstrip().lstrip() )
history.Save()
+# ====================================================================
-# Create summary mail text.
+# Mail init.
+if domail:
+ srv = smtplib.SMTP( mailserver )
+ #srv.set_debuglevel(1)
+ if ( len(mailuser) and len(mailpasswd) ):
+ try:
+ srv.login( mailuser, mailpasswd )
+ except smtplib.SMTPException:
+ print 'ERROR: mailserver login failed'
+ sys.exit(-1)
+
+# Create full report per owner.
+reportssummary = '' # any NEW stuff for the summary
sep = '='*70+'\n'
-for toaddr,body in report.iteritems():
- reportssummary += 'New report for: %s\n\n%s\n' % ( toaddr.replace('@',' AT '), body)
- reportssummary += sep
-summail += reportssummary
+pkgbyowner = {} # map, pkgbyowner[email], list of pkgids for all owner's broken packages
+reports = {} # map of lists [new,body] - a flag and the full report for a package owner
+
+uniqueids = details.keys()
+uniqueids.sort()
+for uniqueid in uniqueids:
+ (sendflag,name,srcrpm,age,pkgid,lines) = details[uniqueid]
+
+ toaddr = owners.GetOwner(name)
+ if toaddr == '':
+ toaddr = 'UNKNOWN OWNER'
+ x = 'ERROR: "%s" not in owners.list!' % name
+ reportssummary += x + '\n\n'
+
+ # Build list of package ids per owner addr.
+ pkgbyowner.setdefault(toaddr,[])
+ pkgbyowner[toaddr].append(pkgid+' '+age+'\n')
+
+ if sendflag:
+ # sendflag, True => resend broken deps report to owner
+ # however, if age is sufficiently high, don't include report in summary
+ newflag = (age=='' or age<2)
+
+ # TODO: owner has N broken rpms and gets a resent report every n<14 days
+ # because multiple rpms distribute over 14 days. Change that?
+
+ # Build full report per owner. Use a flag for new breakage.
+ reports.setdefault(toaddr,[newflag,''])
+ reports[toaddr][1] += lines
+ # Also try mailing co-owners.
+ for toaddr in owners.GetCoOwnerList(name):
+ reports.setdefault(toaddr,[None,''])
+ reports[toaddr][1] += lines
+
+# Mail reports and construct summary of new reports.
+for toaddr,(new,body) in reports.iteritems():
+ if new: # Include new reports in summary.
+ reportssummary += 'New report for: %s\n\n%s\n' % ( toaddr.replace('@',' AT '), body)
+ reportssummary += sep
+ # Send mail to every package owner with broken package dependencies.
+ mailtext = 'This is an automated mail created by an experimental script.\nYour following packages in the repository contain broken dependencies:\n\n'
+ mailtext += body
+ if domail and toaddr!='UNKNOWN OWNER':
+ mailsplit( srv, fromaddr, [toaddr,'bugs.michael at gmx.net'], replytoaddr, mailsubject, mailtext )
+
+summail = reportssummary
# Add list of broken packages sorted by owner.
ownerlist = pkgbyowner.keys()
@@ -300,8 +339,7 @@
pkgs = pkgbyowner[owner]
pkgs.sort()
for pkg in pkgs:
- summail += ' '+pkg+' '+agedict[pkg]
- summail += '\n'
+ summail += ' '+pkg
summail += '\n'
if len(ownerlist):
summail += '\n'
@@ -321,29 +359,9 @@
pkgs.sort()
for pkg in pkgs:
for dep in summary[repoid][pkg]:
- summail += ( ' %s requires %s\n' % (pkg,dep) )
+ summail += ( ' %s requires %s\n' % (pkg.replace(' ',''),dep) )
summail += '\n\n'
-
-# Mail init.
-if domail:
- srv = smtplib.SMTP( mailserver )
- #srv.set_debuglevel(1)
- if ( len(mailuser) and len(mailpasswd) ):
- try:
- srv.login( mailuser, mailpasswd )
- except smtplib.SMTPException:
- print 'ERROR: mailserver login failed'
- sys.exit(-1)
-
-# Send mail to every package owner with broken package dependencies.
-for toaddr,body in report.iteritems():
- mailtext = 'This is an automated mail created by an experimental script.\nYour following packages in the repository contain broken dependencies:\n\n'
- mailtext += body
- if domail and toaddr != 'UNKNOWN OWNER':
- mailsplit( srv, fromaddr, toaddr, replytoaddr, mailsubject, mailtext )
-
-
# Decrease the "spam" a bit. Mail a summary (even if there are no new
# reports) every 7 days.
timestampfile = os.path.join(ownersworkdir,'lastsummary.timestamp')
@@ -360,7 +378,6 @@
# Send summary to mailing-list
# if there are new reports.
-# TODO: weekly summary?
if domail and mailsummary and (len(summail) or mailsubject.find('development') >= 0): # avoid sending empty reports for stable/old branches
if not len(summail):
summail = 'no broken dependencies'
More information about the scm-commits
mailing list