[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