[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