extras-repoclosure rc-report.py,1.61,1.62

Michael Schwendt mschwendt at fedoraproject.org
Tue Jun 9 12:16:44 UTC 2009


Author: mschwendt

Update of /cvs/fedora/extras-repoclosure
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10539

Modified Files:
	rc-report.py 
Log Message:
* add --fedora option to use Fedora Project package owner address
instead of FAS dump
* parse/evaluate "related pkgs:" names in updated rc-modified reports
and mail related package owners
* disable the "packages by owner" summary if --fedora is used (as owner
and co-owners receive their private reports via the same alias addr)



Index: rc-report.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-report.py,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- rc-report.py	15 Dec 2008 20:13:44 -0000	1.61
+++ rc-report.py	9 Jun 2009 12:16:43 -0000	1.62
@@ -38,6 +38,8 @@
         self.srpm_name = None
         self.owner = ''
         self.coowners = []
+        self.relatedpkgs = []
+        self.relatedowners = []
         # disabled/stripped feature
         self.mail = True  # whether to notify owner by mail
         # disabled/stripped feature
@@ -64,27 +66,45 @@
         return False
 
 
-def makeOwners(brokendeps):
-    owners = PackageOwners()
-    try:
-        if FAS['ownerslist']:
-            gotowners = owners.FromURL(repoid=FAS['project'],url=FAS['ownerslist'],pkgdb=False)
+def makeOwners(brokendeps,fedora=False):
+    if not fedora:
+        owners = PackageOwners()
+        try:
+            if FAS['ownerslist']:
+                gotowners = owners.FromURL(repoid=FAS['project'],url=FAS['ownerslist'],pkgdb=False)
+            else:
+                gotowners = owners.FromURL(repoid=FAS['project'],username=FAS['user'],password=FAS['passwd'])
+            if not gotowners:
+                raise IOError('ERROR: Could not retrieve package owner data.')
+        except IOError, e:
+            print e
+            sys.exit(1)
+
+    def _getowner(p):
+        if fedora:
+            return '%s-owner at fedoraproject.org' % p.lower()
         else:
-            gotowners = owners.FromURL(repoid=FAS['project'],username=FAS['user'],password=FAS['passwd'])
-        if not gotowners:
-            raise IOError('ERROR: Could not retrieve package owner data.')
-    except IOError, e:
-        print e
-        sys.exit(1)
+            return owners.GetOwner(p)
+
+    def _getcoowners(p):
+        if fedora:
+            return []
+        else:
+            return owners.GetCoOwnerList(p)
+
     for b in brokendeps:
-        toaddr = owners.GetOwner(b.srpm_name)
+        toaddr = _getowner(b.srpm_name)
         if toaddr == '':
             toaddr = 'UNKNOWN OWNER'
             e = 'ERROR: "%s" not in owners.list!\n\n' % b.srpm_name
             if e not in errcache:
                 errcache.append(e)
         b.owner = toaddr
-        b.coowners = owners.GetCoOwnerList(b.srpm_name)
+        b.coowners = _getcoowners(b.srpm_name)
+        b.relatedowners = []
+        for n in b.relatedpkgs:
+            b.relatedowners.append( _getowner(n) )
+            b.relatedowners += _getcoowners(n)
 
 
 def mail(smtp, fromaddr, toaddrs, replytoaddr, subject, body):
@@ -196,6 +216,8 @@
                   help="repository warnings to include (needsign, testing)")
 parser.add_option("", "--noowners", default=False, action="store_true",
                   help="don't fetch package owner data from FAS")
+parser.add_option("", "--fedora", default=False, action="store_true",
+                  help="use Fedora Project pkgname-owner addresses instead of FAS")
 (opts, args) = parser.parse_args()
 
 loadConfigFile(opts.config)
@@ -216,7 +238,7 @@
 
     f = file( logfilename )
     pkgre = re.compile('(?P<name>.*)-[^-]+-[^-]+$')
-    inbody = False
+    inbody = 0
     srcrpm = ''
     for line in f:
         if line.startswith('source rpm: '):
@@ -224,13 +246,13 @@
             srcrpm = w[2]
             res = pkgre.search( srcrpm )  # try to get src.rpm "name"
             if not res:  # only true for invalid input
-                inbody = False
+                inbody = 0
             else:
                 srpm_name = res.group('name')
-                inbody = True
             continue
 
-        elif inbody and line.startswith('package: '):
+        elif line.startswith('package: '):
+            inbody = 1
             b = BrokenDep()
             w = line.rstrip().split(' ')
             if len(w)==6:
@@ -245,9 +267,18 @@
             b.name = rpmUtils.miscutils.splitFilename(b.pkgid)[0]
             brokendeps.append(b)
 
-        if inbody:
-            # Copy report per broken package.
-            b.report.append( line.rstrip() )
+        if inbody == 1:
+            if line.startswith('related pkgs:'):
+                inbody = 2
+                continue
+            else:
+                # Copy report per broken package.
+                b.report.append( line.rstrip() )
+
+        elif inbody == 2:
+            n = line.lstrip().rstrip()
+            if len(n) and n!=srpm_name:
+                b.relatedpkgs.append(n)
 
 
 def bdSortBySrcName(a,b):
@@ -283,7 +314,7 @@
 
 # Fill in package owners.
 if not opts.noowners:
-    makeOwners(brokendeps)
+    makeOwners(brokendeps,opts.fedora)
 
 # Build full mail report per owner. Use a flag for new breakage.
 reports = {}  # map of lists [new,body] - a flag and the full report for a package owner
@@ -300,6 +331,10 @@
             for toaddr in b.coowners:
                 reports.setdefault(toaddr,[None,''])
                 reports[toaddr][1] += r
+            # Also build mails for related pkg owners.
+            for toaddr in b.relatedowners:
+                reports.setdefault(toaddr,[None,''])
+                reports[toaddr][1] += r
 
 
 sep = '='*70+'\n'
@@ -347,7 +382,7 @@
         return x
     return x[0:dpos]+' '+x[dpos+1:]
 
-if not opts.noowners and len(brokendeps):
+if not opts.noowners and not opts.fedora and len(brokendeps):
     summail += ('Summary of broken packages (by primary owner):\n')
     brokendeps.sort(bdSortByOwnerAndName)
     seenbefore = []
@@ -399,7 +434,7 @@
 # Mail reports to owners.
 for toaddr,(new,body) in reports.iteritems():
     # Send mail to every package owner with broken package dependencies.
-    mailtext = 'Your following packages in the repository suffer from broken dependencies:\n\n'
+    mailtext = 'The following packages in the repository suffer from broken dependencies:\n\n'
     mailtext += giveNeedsignMsg()
     mailtext += giveTestingMsg()
     mailtext += body




More information about the fedora-extras-commits mailing list