[yum-cvs] yum yum-updatesd.py,1.11,1.12

Luke Macken lmacken at linux.duke.edu
Tue Jun 13 18:57:12 UTC 2006


Update of /home/groups/yum/cvs/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv3170

Modified Files:
	yum-updatesd.py 
Log Message:
Add support for reading 'updateinfo' metadata from repos, if it exists, and sending it through dbus to the puplet.  For testing purposes, arbitrary metadata may be inserted into repository using the following tool:
    http://people.redhat.com/lmacken/insertmd.py


Index: yum-updatesd.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum-updatesd.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- yum-updatesd.py	7 Jun 2006 03:31:33 -0000	1.11
+++ yum-updatesd.py	13 Jun 2006 18:57:10 -0000	1.12
@@ -29,6 +29,7 @@
 import os
 import sys
 import time
+import gzip
 import dbus
 import dbus.service
 import dbus.glib
@@ -49,6 +50,7 @@
                        IncludingConfigParser
 from yum.constants import *
 from yum.packages import YumInstalledPackage
+from yum.update_md import UpdateMetadata
 
 # FIXME: is it really sane to use this from here?
 import callback
@@ -293,23 +295,56 @@
         self.doRpmDBSetup()
         self.doUpdateSetup()
 
+    def populateUpdateMetadata(self):
+        self.updateMetadata = UpdateMetadata()
+        repos = []
+
+        for (new, old) in self.up.getUpdatesTuples():
+            pkg = self.getPackageObject(new)
+            if pkg.repoid not in repos:
+                repo = self.repos.getRepo(pkg.repoid)
+                repos.append(repo.id)
+                try:
+                    md = repo.retrieveMD('updateinfo')
+                except:
+                    continue
+                md = gzip.open(md)
+                self.updateMetadata.add(md)
+                md.close()
+
     def populateUpdates(self):
         def getDbusPackageDict(pkg):
             """Returns a dictionary corresponding to the package object
             in the form that we can send over the wire for dbus."""
-            return { "name": pkg.returnSimple("name"),
-                     "version": pkg.returnSimple("version"),
-                     "release": pkg.returnSimple("release"),
-                     "epoch": pkg.returnSimple("epoch"),
-                     "arch": pkg.returnSimple("arch"),
-                     "sourcerpm": pkg.returnSimple("sourcerpm"),
-                     "summary": pkg.returnSimple("summary") or "",
-                     }            
-        
+            pkgDict = {
+                    "name": pkg.returnSimple("name"),
+                    "version": pkg.returnSimple("version"),
+                    "release": pkg.returnSimple("release"),
+                    "epoch": pkg.returnSimple("epoch"),
+                    "arch": pkg.returnSimple("arch"),
+                    "sourcerpm": pkg.returnSimple("sourcerpm"),
+                    "summary": pkg.returnSimple("summary") or "",
+            }
+
+            md = self.updateMetadata.get_notice((pkg.name, pkg.ver, pkg.rel))
+            if md:
+                pkgDict['update_id'] = md.update_id or ''
+                pkgDict['release_date'] = md.release_date or ''
+                pkgDict['title'] = md.title or ''
+                pkgDict['status'] = md.status or ''
+                pkgDict['description'] = md.description or ''
+                pkgDict['distribution'] = md.distribution or ''
+                pkgDict['cves'] = string.join(md.cves) or ''
+                pkgDict['urls'] = string.join(md.urls) or ''
+
+            return pkgDict
+
         if not hasattr(self, 'up'):
             # we're _only_ called after updates are setup
             return
 
+        self.populateUpdateMetadata()
+
         self.updateInfo = []
         for (new, old) in self.up.getUpdatesTuples():
             n = getDbusPackageDict(self.getPackageObject(new))




More information about the Yum-cvs-commits mailing list