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