[yum-cvs] yum-utils/plugins/fedorakmod fedorakmod.py,1.1,1.2

Jack Neely slack at linux.duke.edu
Mon Jul 3 21:28:42 UTC 2006


Update of /home/groups/yum/cvs/yum-utils/plugins/fedorakmod
In directory login1.linux.duke.edu:/tmp/cvs-serv2636

Modified Files:
	fedorakmod.py 
Log Message:
Update to the latest Fedora Extras Kernel Module specs and the latest
Yum API.  


Index: fedorakmod.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/plugins/fedorakmod/fedorakmod.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- fedorakmod.py	13 Feb 2006 20:21:05 -0000	1.1
+++ fedorakmod.py	3 Jul 2006 21:28:40 -0000	1.2
@@ -1,8 +1,8 @@
 #!/usr/bin/python
 
 # fedorakmod.py - Fedora Extras Yum Kernel Module Support
-# Copyright 2006 Jack Neely 
-# Written by Jack Neely <jjneely at gmail.com>
+# Copyright 2006 NC State University
+# Written by Jack Neely <jjneely at ncsu.edu>
 #
 # SDG
 #
@@ -22,46 +22,68 @@
 
 import rpm
 
-from yum import rpmUtils
+from rpmUtils.miscutils import *
 from yum import packages
 from yum.constants import TS_INSTALL
 from yum.plugins import TYPE_CORE, PluginYumExit
 
-requires_api_version = '2.2'
+requires_api_version = '2.4'
 plugin_type = (TYPE_CORE,)
 
 kernelProvides = ["kernel-%s" % a for a in rpmUtils.arch.arches.keys()]
         
 
-def getKernelReqs(hdr):
-    reqs = []
-    names = hdr[rpm.RPMTAG_REQUIRENAME]
-    flags = hdr[rpm.RPMTAG_REQUIREFLAGS]
-    ver =   hdr[rpm.RPMTAG_REQUIREVERSION]
-    if names is not None:
-        reqs = zip(names, flags, ver)
+def flagToString(flags):
+    # <shoving something pointy in my eye>
+    if flags & rpm.RPMSENSE_EQUAL & rpm.RPMSENSE_GREATER:
+        return 'GE'
+    if flags & rpm.RPMSENSE_EQUAL & rpm.RPMSENSE_LESS:
+        return 'LE'
+    if flags & rpm.RPMSENSE_EQUAL:
+        return 'EQ'
+    if flags & rpm.RPMSENSE_GREATER:
+        return 'GT'
+    if flags & rpm.RPMSENSE_LESS:
+        return 'LT'
+    # </shoving something pointy in my eye>
+
+    # Umm...now I'm screwed
+    return flags
+
+
+def populatePrco(po, hdr):
+    "Populate the package object with the needed PRCO interface."
+    # Apperently, Yum actually never takes the hdr object and uses it
+    # to populate the prco information
+
+    # prco['foo'] looks like (name, flag, (e,v,r))
+    for tag in ['OBSOLETE', 'CONFLICT', 'REQUIRE', 'PROVIDE']:
+        name = hdr[getattr(rpm, 'RPMTAG_%sNAME' % tag)]
+
+        list = hdr[getattr(rpm, 'RPMTAG_%sFLAGS' % tag)]
+        flag = [ flagToString(i) for i in list ]
+
+        list = hdr[getattr(rpm, 'RPMTAG_%sVERSION' % tag)]
+        vers = [ stringToVersion(i) for i in list ]
+
+        prcotype = tag.lower() + 's'
+        if name is not None:
+            po.prco[prcotype] = zip(name, flag, vers)
+        else:
+            po.prco[prcotype] = []
+
+    return po
+
+
+def getKernelReqs(po):
+    """Pass in a package header.  This function will return a list of
+       tuples (name, flags, ver) representing any kernel requires."""
+      
+    reqs = po.returnPrco("requires")
     return filter(lambda r: r[0] in kernelProvides, reqs)
 
 
-#def getKernelReqs(po):
-#    """Pass in a package header.  This function will return a list of
-#       tuples (name, flags, ver) representing any kernel requires."""
-#      
-#    # ARG! YumInstalledPackage doesn't have the prco interface
-#    # YumAvailablePackage doesn't have the tagByName() interface
-#    # I cannot make this function generic using the PO non-APIs
-#      
-#    # reqs = po.returnPrco('requires') # *sigh*
-#    reqs = []
-#    names = po.tagByName("requirename")
-#    flags = po.tagByName("requireflags")
-#    ver   = po.tagByName("requireversion")
-#    if names is not None:
-#        reqs = zip(names, flags, ver)
-#    return filter(lambda r: r[0] in kernelProvides, reqs)
-
-
-def handleKernelModule(c, txmbr):
+def handleKernelModule(c, modpo):
     """Figure out what special magic needs to be done to install/upgrade
        this kernel module."""
 
@@ -70,22 +92,22 @@
     rpmdb = c.getRpmDB()
     tsInfo = c.getTsInfo()
     
-    moduleHeader = txmbr.po.returnLocalHeader()
-    kernelReqs = getKernelReqs(moduleHeader)
-    instPkgs = rpmdb.returnTupleByKeyword(name=txmbr.po.name)
+    kernelReqs = getKernelReqs(modpo)
+    instPkgs = rpmdb.returnTupleByKeyword(name=modpo.name)
     for pkg in instPkgs:
         hdr = rpmdb.returnHeaderByTuple(pkg)[0] # Assume no dup NAEVRs
         po = packages.YumInstalledPackage(hdr)
-        instKernelReqs = getKernelReqs(hdr)
+        populatePrco(po, hdr)
+        instKernelReqs = getKernelReqs(po)
 
         for r in kernelReqs:
             if r in instKernelReqs:
                 # we know that an incoming kernel module requires the
                 # same kernel as an already installed moulde of the
-                # same name.  "Upgrade" this module instead of install
+                # same name.  "Upgrade" this module instead of install.
                 tsInfo.addErase(po)
                 c.info(2, 'Removing kernel module %s upgraded to %s' %
-                       (po, txmbr.po))
+                       (po, modpo))
                 break
 
 
@@ -106,8 +128,9 @@
     for te in c.getTsInfo().getMembers():
         if te.ts_state not in ('i', 'u'):
             continue
-        if "kernel-module" in te.po.getProvidesNames():
+        if "kernel-modules" in te.po.getProvidesNames():
             c.info(4, "Handling kernel module: %s" % te.name)
             tsCheck(te)
-            handleKernelModule(c, te)
-            
+            handleKernelModule(c, te.po)
+           
+# vim:ts=4:expandtab 




More information about the Yum-cvs-commits mailing list