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

Michael Schwendt mschwendt at fedoraproject.org
Mon Sep 13 12:04:30 UTC 2010


Author: mschwendt

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

Modified Files:
	rc-report.py 
Log Message:
add changes for experimental --diff features


Index: rc-report.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-report.py,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- rc-report.py	13 Sep 2010 11:55:02 -0000	1.67
+++ rc-report.py	13 Sep 2010 12:04:29 -0000	1.68
@@ -7,6 +7,7 @@
 from optparse import OptionParser
 import ConfigParser
 import Mailer, smtplib
+import pickle
 
 import BrokenDeps
 from PackageOwners import PackageOwners
@@ -140,6 +141,17 @@
 parser = OptionParser(usage=usage)
 parser.add_option("-c", "--config", default=None,
                   help="config file to use")
+parser.add_option("-d", "--diff", default=False, action='store_true',
+                  help="compare broken deps with contents from pickle file")
+parser.add_option("", "--diffname", default=None, action='store',
+                  type='string', dest='diffname',
+                  help="set name of dist covered by pickle file")
+parser.add_option("", "--reportwhat", default='newest', 
+                  action='store', type='string', dest='reportwhat',
+                  help="what broken deps to report: newest, all")
+parser.add_option("", "--bddb", default=None, action='store',
+                  type='string', dest='bddb',
+                  help="broken deps pickle file")
 parser.add_option("-k", "--keyword", default=[], action='append',
                   help="a keyword to look for in repoids")
 parser.add_option("-m", "--mail", default=[], action='append',
@@ -161,6 +173,7 @@
 
 domail = len(opts.mail)>0
 brokendeps = []  # list of BrokenDeps
+prevbrokendeps = []
 errcache = []  # error messages to be included in the summary mail
 
 if not len(args):
@@ -176,18 +189,65 @@
     f.close()
     brokendeps += BrokenDeps.Parser(lines)
 
+# Save or load pickle file for diff support.
+if opts.bddb:
+    if not opts.diff:
+        f = open(opts.bddb,'w')
+        pickle.dump(brokendeps,f)
+        f.close()
+    else:
+        f = open(opts.bddb,'r')
+        prevbrokendeps = pickle.load(f)
+        f.close()
+
 BrokenDeps.DropUnwantedRepos(brokendeps,opts.keyword)
 BrokenDeps.DropWhiteListed(brokendeps,whiteListed)
+BrokenDeps.DropUnwantedRepos(prevbrokendeps,opts.keyword)
+BrokenDeps.DropWhiteListed(prevbrokendeps,whiteListed)
 
 # Fill in package owners.
 if not opts.noowners:
     makeOwners(brokendeps,opts.fedora)
+    makeOwners(prevbrokendeps,opts.fedora)
 
+still_broken_srpms = []
+fixed_srpms = []
+still_brokendeps = []
+new_brokendeps = []
+if opts.diff:
+    # Look which broken deps are fixed.
+    # TODO: compare unresolvable deps, too?
+
+    for b in list(brokendeps):
+        # is it NEW?
+        b2 = BrokenDeps.FindByPkgId(b,prevbrokendeps)
+        if b2:  # no
+            still_brokendeps.append(b2)
+        else:  # yes
+            # the broken dep is NOT in 'prevbrokendeps' list
+            new_brokendeps.append(b)
+
+    # construct list of still_broken src.rpm "name" values
+    for b in still_brokendeps:
+        if b.srpm_name not in still_broken_srpms:
+            still_broken_srpms.append(b.srpm_name)
+
+    # The reverse check: What is fixed?
+    for b in list(prevbrokendeps):
+        b2 = BrokenDeps.FindByPkgId(b,brokendeps)
+        if not b2:  # fixed broken dep
+            if b.srpm_name not in fixed_srpms:
+                fixed_srpms.append(b.srpm_name)
+
+
+brokendeps_to_report = brokendeps
+if opts.diff and opts.reportwhat=='newest':
+    brokendeps_to_report = still_brokendeps
 # Build full mail report per owner.
 reports = {}  # map of strings - full report for a package owner
 if not opts.noowners:
-    brokendeps.sort(BrokenDeps.SortByOwnerAndName)
-    for b in brokendeps:
+    brokendeps_to_report.sort(BrokenDeps.SortByOwnerAndName)
+    for b in brokendeps_to_report:
         if noMailWhiteList(b):
             continue
         r = '\n'.join(b.report)+'\n\n'
@@ -224,16 +284,64 @@
 reportssummary += giveTestingMsg()
 summail += reportssummary
 
-if len(brokendeps):
-    summail += ('Summary of broken packages (by src.rpm name):\n\n')
-    brokendeps.sort(BrokenDeps.SortBySourceName)
-    seenbefore = []
-    for b in brokendeps:
-        if b.srpm_name not in seenbefore:
-            summail += '    '+b.srpm_name+'\n'
-            seenbefore.append(b.srpm_name)
+diffname = 'Updates only'
+if opts.diffname:
+    diffname = opts.diffname
+
+if opts.diff:
+    if opts.reportwhat == 'all':
+        if len(prevbrokendeps)>0:
+            summail += ('Broken packages in '+diffname+' (src.rpm names):\n\n')
+            prevbrokendeps.sort(BrokenDeps.SortBySourceName)
+            seenbefore = []
+            for b in prevbrokendeps:
+                if b.srpm_name not in seenbefore:
+                    bcom = noMailWhiteList(b)
+                    if bcom:
+                        _w = 40
+                        _a = '    '+b.srpm_name
+                        _w -= len(_a)
+                        summail += _a+' '*_w+'('+bcom+')\n'
+                    else:
+                        summail += '    '+b.srpm_name+'\n'
+                    seenbefore.append(b.srpm_name)
+            summail += '\n\n'
+    else:  # 'newest'
+        if len(still_broken_srpms)>0:
+            summail += 'Still broken compared with '+diffname+':\n\n'
+            summail += '    %i builds\n' % len(still_broken_srpms)
+            summail += '\n\n'
+
+if opts.diff and len(fixed_srpms):
+    fixed_srpms.sort()
+    summail += 'Fixed packages compared with '+diffname+':\n\n'
+    for srpm in fixed_srpms:
+        summail += '    '+srpm+'\n'
     summail += '\n\n'
 
+if len(brokendeps):
+    if opts.diff:
+        bd = new_brokendeps
+        summail += ('Additional broken packages with Test Updates (src.rpm names):\n\n')
+    else:
+        summail += ('Broken packages (src.rpm names):\n\n')
+        bd = brokendeps
+    if len(bd)>0:
+        bd.sort(BrokenDeps.SortBySourceName)
+        seenbefore = []
+        for b in bd:
+            if b.srpm_name not in seenbefore:
+                bcom = noMailWhiteList(b)
+                if bcom:
+                    _w = 40
+                    _a = '    '+b.srpm_name
+                    _w -= len(_a)
+                    summail += _a+' '*_w+'('+bcom+')\n'
+                else:
+                    summail += '    '+b.srpm_name+'\n'
+                seenbefore.append(b.srpm_name)
+        summail += '\n\n'
+
 # TODO: Review -- in times of Fedora pkgdb and alias addresses for
 # package owners these summaries are not too useful anymore.
 # Especially the full expanded list of packages for all co-owners



More information about the scm-commits mailing list