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