[yum-cvs] yum/yum depsolve.py,1.66,1.67

Jack Neely slack at login.linux.duke.edu
Sat Jul 9 22:57:12 UTC 2005


Update of /home//groups/yum/cvs/yum/yum
In directory login:/tmp/cvs-serv18523/yum

Modified Files:
	depsolve.py 
Log Message:
Beginings of support for kernel-module style packages as described on 
fedora-packaging.  This patch attempts to figure out if any kernel-module 
package should be removed when a new one is installed.  This works by
making sure there is only one kernel-module-foo package that requires 
kernel-A = VR.

Some other kernel-module package work is forth coming.


Index: depsolve.py
===================================================================
RCS file: /home//groups/yum/cvs/yum/yum/depsolve.py,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -r1.66 -r1.67
--- depsolve.py	27 Jun 2005 06:34:05 -0000	1.66
+++ depsolve.py	9 Jul 2005 22:57:09 -0000	1.67
@@ -110,7 +110,39 @@
             return 1
         
         return 0
-        
+
+    def handleKernelModule(self, txmbr):
+        """Figure out what special magic needs to be done to install/upgrade
+           this kernel module."""
+
+        def getKernelReqs(hdr):
+            kernels = ["kernel-%s" % a for a in rpmUtils.arch.arches.keys()]
+            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)
+            return filter(lambda r: r[0] in kernels, reqs)
+
+        kernelReqs = getKernelReqs(txmbr.po.returnLocalHeader())
+        instPkgs = self.rpmdb.returnTupleByKeyword(name=txmbr.po.name)
+        for pkg in instPkgs:
+            hdr = self.rpmdb.returnHeaderByTuple(pkg)[0]
+            instKernelReqs = getKernelReqs(hdr)
+            
+            for r in kernelReqs:
+                if r in instKernelReqs:
+                    # we know that an incoming kernel module requires the
+                    # same kernel as an already installed module of the
+                    # same name.  "Upgrade" this module instead of install
+                    po = packages.YumInstalledPackage(hdr)
+                    self.tsInfo.addErase(po)
+                    self.log(4, 'Removing kernel module %s upgraded to %s' %
+                             (po, txmbr.po))
+                    break
+       
+
     def populateTs(self, test=0, keepold=1):
         """take transactionData class and populate transaction set"""
 
@@ -139,6 +171,8 @@
                 rpmfile = txmbr.po.localPkg()
                 
                 if txmbr.ts_state == 'u':
+                    if txmbr.po.name.startswith("kernel-module-"):
+                        self.handleKernelModule(txmbr)
                     if self.allowedMultipleInstalls(txmbr.po):
                         self.log(5, '%s converted to install' % (txmbr.po))
                         txmbr.ts_state = 'i'




More information about the Yum-cvs-commits mailing list