extras-repoclosure rc-report.py,1.25,1.26
Michael Schwendt (mschwendt)
fedora-extras-commits at redhat.com
Mon Nov 27 23:52:20 UTC 2006
Author: mschwendt
Update of /cvs/fedora/extras-repoclosure
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19243
Modified Files:
rc-report.py
Log Message:
hack: reformat and mail less often
Index: rc-report.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-report.py,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- rc-report.py 30 Sep 2006 19:24:11 -0000 1.25
+++ rc-report.py 27 Nov 2006 23:52:20 -0000 1.26
@@ -3,21 +3,18 @@
import commands
import datetime, time
-import os, sys
+import os, sys, stat, shutil
import pickle
import re
import smtplib
-import sys
-sys.path.append('/srv/extras-push/work/extras-repoclosure')
from PackageOwners import PackageOwners
+
sys.path.append('/srv/extras-push/work/buildsys-utils/pushscript')
import Utils, RepoSupport
-
cfg = Utils.load_config_module('Extras')
domail = True
-mailsummary = True
combinedreport = False
maxmailsize = 39*1024
@@ -108,7 +105,8 @@
if d.days >= 2:
return '(%s days)' % d.days
return ''
-
+
+
def mail(smtp, fromaddr, toaddrs, replytoaddr, subject, body):
from email.Header import Header
from email.MIMEText import MIMEText
@@ -184,6 +182,7 @@
#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
@@ -207,7 +206,6 @@
if not combinedreport:
mailsubject = subject + ' ' + release + ' - ' + datestring
- summail = ''
pkgbyowner = {}
summary = {}
report = {}
@@ -255,7 +253,7 @@
if ownedby == '':
ownedby = 'UNKNOWN OWNER'
x = 'ERROR: %s not in owners.list\nERROR: source rpm is %s' % ( name, srcrpm )
- summail += x + '\n\n'
+ reportssummary += x + '\n\n'
# name-EVR.arch
pkgid = w[1]+'-'+w[3]
pkgid2 = w[1]+' - '+w[3]
@@ -285,11 +283,18 @@
history.Save()
-# Add list of broken packages sorted by owner to beginning of summary mail.
+# Create summary mail text.
+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
+
+# Add list of broken packages sorted by owner.
ownerlist = pkgbyowner.keys()
ownerlist.sort()
if len(ownerlist):
- summail += ('Summary of broken packages (by owner):\n') + '-'*70+'\n'
+ summail += ('Summary of broken packages (by owner):\n') + '\n'
for owner in ownerlist:
summail += ' '+owner.replace('@',' AT ')+'\n'
pkgs = pkgbyowner[owner]
@@ -306,19 +311,19 @@
allrepoids = []
for release in rs.AllReleases():
allrepoids += rs.GenerateRepoIds(release)
-
# Add details about broken packages, sorted by repository id.
repoids = summary.keys()
for repoid in allrepoids:
if repoid not in repoids:
continue
- summail += ('Broken packages in %s:\n' % repoid) + '-'*70+'\n'
+ summail += sep+('Broken packages in %s:\n\n' % repoid)
pkgs = summary[repoid].keys()
pkgs.sort()
for pkg in pkgs:
for dep in summary[repoid][pkg]:
summail += ( ' %s requires %s\n' % (pkg,dep) )
- summail += '\n'
+ summail += '\n\n'
+
# Mail init.
if domail:
@@ -333,19 +338,32 @@
# Send mail to every package owner with broken package dependencies.
for toaddr,body in report.iteritems():
- x = '='*70
- summail += x+'\n'
- x = 'New report for: %s\n\n%s' % ( toaddr.replace('@',' AT '), body)
- summail += x
-
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')
+try:
+ timestamp = os.stat(timestampfile).st_mtime
+except OSError:
+ timestamp = 0
+ shutil.copy('/dev/null',timestampfile)
+if len(reportssummary) or (datetime.date.fromtimestamp(timestamp)+datetime.timedelta(days=7) < today):
+ shutil.copy('/dev/null',timestampfile)
+ mailsummary = True
+else:
+ mailsummary = False
+
+# 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 packages'
+ summail = 'no broken dependencies'
toaddr = replytoaddr # mail summary to list
mailsplit( srv, fromaddr, toaddr, '', sumsubject, summail )
More information about the fedora-extras-commits
mailing list