[yum-cvs] yum/rpmUtils __init__.py,1.25,1.26
Seth Vidal
skvidal at linux.duke.edu
Sat Aug 19 19:22:49 UTC 2006
Update of /home/groups/yum/cvs/yum/rpmUtils
In directory login1.linux.duke.edu:/tmp/cvs-serv7398/rpmUtils
Modified Files:
__init__.py
Log Message:
clean out all of old rpmdb code
Index: __init__.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/rpmUtils/__init__.py,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- __init__.py 28 Jun 2006 05:19:50 -0000 1.25
+++ __init__.py 19 Aug 2006 19:22:47 -0000 1.26
@@ -1,286 +1,9 @@
#!/usr/bin/python -tt
-import rpm
-import miscutils
import exceptions
-import oldUtils
class RpmUtilsError(exceptions.Exception):
def __init__(self, args=None):
exceptions.Exception.__init__(self)
self.args = args
-
-
-
-# useful functions
-
-class RpmDBHolder:
- def __init__(self):
- self.pkglists = []
-
- def addDB(self, ts):
- self.ts = ts
- self.match_on_index = 1
-
- try:
- # we need the find a known index so we can test if
- # rpm/rpm-python allows us to grab packages by db index.
- mi = self.ts.dbMatch()
- hdr = mi.next()
- known_index = mi.instance()
- mi = self.ts.dbMatch(0, known_index)
- hdr = mi.next()
- except (TypeError, StopIteration), e:
- self.match_on_index = 0
- else:
- self.match_on_index = 1
-
- self.indexdict = {}
-
- mi = self.ts.dbMatch()
- for hdr in mi:
- pkgtuple = self._hdr2pkgTuple(hdr)
- if not self.indexdict.has_key(pkgtuple):
- self.indexdict[pkgtuple] = []
- else:
- continue
- self.indexdict[pkgtuple].append(mi.instance())
- self.pkglists.append(pkgtuple)
- del mi
-
- def _hdr2pkgTuple(self, hdr):
- name = hdr['name']
- arch = hdr['arch']
- ver = str(hdr['version']) # convert these to strings to be sure
- rel = str(hdr['release'])
- epoch = hdr['epoch']
- if epoch is None:
- epoch = '0'
- else:
- epoch = str(epoch)
-
- return (name, arch, epoch, ver, rel)
-
- def getPkgList(self):
- return self.pkglists
-
- def getHdrList(self):
- hdrlist = []
- mi = self.ts.dbMatch()
- if mi:
- for hdr in mi:
- hdrlist.append(hdr)
-
- del mi
- return hdrlist
-
- def getNameArchPkgList(self):
- lst = []
- for (name, arch, epoch, ver, rel) in self.pkglists:
- lst.append((name, arch))
-
- return miscutils.unique(lst)
-
-
- def getNamePkgList(self):
- lst = []
- for (name, arch, epoch, ver, rel) in self.pkglists:
- lst.append(name)
-
- return miscutils.unique(lst)
-
- def returnNewestbyNameArch(self):
- """returns the newest set of pkgs based on 'name and arch'"""
- highdict = {}
- for (n, a, e, v, r) in self.pkglists:
- if not highdict.has_key((n, a)):
- highdict[(n, a)] = (e, v, r)
- else:
- (e2, v2, r2) = highdict[(n, a)]
- rc = miscutils.compareEVR((e,v,r), (e2, v2, r2))
- if rc > 0:
- highdict[(n, a)] = (e, v, r)
-
- returns = []
- for (n, a) in highdict.keys():
- (e, v, r) = highdict[(n, a)]
- returns.append((n, a, e, v ,r))
-
- return returns
-
- def returnNewestbyName(self):
- """returns the newest set of pkgs based on name"""
- highdict = {}
- for (n, a, e, v, r) in self.pkglists:
- if not highdict.has_key(n):
- highdict[n] = (a, e, v, r)
- else:
- (a2, e2, v2, r2) = highdict[n]
- rc = miscutils.compareEVR((e,v,r), (e2, v2, r2))
- if rc > 0:
- highdict[n] = (a, e, v, r)
-
- returns = []
- for n in highdict.keys():
- (a, e, v, r) = highdict[n]
- returns.append((n, a, e, v ,r))
-
- return returns
-
- def installed(self, name=None, arch=None, epoch=None, ver=None, rel=None):
- if len(self.returnTupleByKeyword(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel)) > 0:
- return 1
- return 0
-
-
- def returnTupleByKeyword(self, name=None, arch=None, epoch=None, ver=None, rel=None):
- """return a list of pkgtuples based on name, arch, epoch, ver and/or rel
- matches."""
-
- completelist = self.getPkgList()
- removedict = {}
- returnlist = []
-
- for pkgtup in completelist:
- (n, a, e, v, r) = pkgtup
- if name is not None:
- if name != n:
- removedict[pkgtup] = 1
- continue
- if arch is not None:
- if arch != a:
- removedict[pkgtup] = 1
- continue
- if epoch is not None:
- if epoch != e:
- removedict[pkgtup] = 1
- continue
- if ver is not None:
- if ver != v:
- removedict[pkgtup] = 1
- continue
- if rel is not None:
- if rel != r:
- removedict[pkgtup] = 1
- continue
-
- for pkgtup in completelist:
- if not removedict.has_key(pkgtup):
- returnlist.append(pkgtup)
-
- return returnlist
-
- def getHeadersByKeyword(self, **kwargs):
- """return list of headers from the rpmdb matching a keyword
- ex: getHeadersByKeyword(name='foo', version='1', release='1')
- """
- lst = []
- # lifted from up2date - way to easy and useful NOT to steal - thanks adrian
- mi = self.ts.dbMatch()
- if kwargs.has_key('epoch'):
- del(kwargs['epoch']) # epochs don't work here for None/0/'0' reasons
-
- keywords = len(kwargs.keys())
- for hdr in mi:
- match = 0
- for keyword in kwargs.keys():
- if hdr[keyword] == kwargs[keyword]:
- match += 1
- if match == keywords:
- lst.append(hdr)
- del mi
- return lst
-
-
- def returnHeaderByTuple(self, pkgtuple):
- """returns a list of header(s) based on the pkgtuple provided"""
- (n, a, e, v, r) = pkgtuple
-
- if not self.match_on_index:
- lst = self.getHeadersByKeyword(name=n, arch=a, epoch=e, version=v,
- release=r)
- return lst
- else:
- idxs = self.returnIndexByTuple(pkgtuple)
- idx = idxs[0]
- mi = self.ts.dbMatch(0, idx)
- hdr = mi.next()
- return [hdr]
-
-
- def returnIndexByTuple(self, pkgtuple):
- return self.indexdict[pkgtuple]
-
- def whatProvides(self, provname, provflag, provver):
- """uses the ts in this class to return a list of pkgtuples that match
- the provide"""
-
- matches = []
- checkfileprov = 0
-
- if provname[0] == '/':
- checkfileprov = 1
- matchingFileHdrs = self.ts.dbMatch('basenames', provname)
- matchingHdrs = self.ts.dbMatch('provides', provname)
- else:
- matchingHdrs = self.ts.dbMatch('provides', provname)
-
- # now we have the list of pkgs installed in the rpmdb that
- # have a the provname matching, now we need to find out
- # if any/all of them match the flag/ver set
-
- if checkfileprov and matchingFileHdrs.count() > 0:
- for matchhdr in matchingFileHdrs:
- pkgtuple = self._hdr2pkgTuple(matchhdr)
- matches.append(pkgtuple)
- del matchingFileHdrs
- return miscutils.unique(matches)
-
- if provflag in [0, None] or provver is None: # if we've got no ver or flag
- # for comparison then they all match
- for matchhdr in matchingHdrs:
- pkgtuple = self._hdr2pkgTuple(matchhdr)
- matches.append(pkgtuple)
- del matchingHdrs
- return miscutils.unique(matches)
-
- for matchhdr in matchingHdrs:
- (pkg_n, pkg_a, pkg_e, pkg_v, pkg_r) = self._hdr2pkgTuple(matchhdr)
- pkgtuple = (pkg_n, pkg_a, pkg_e, pkg_v, pkg_r)
- # break the provver up into e-v-r (e:v-r)
- (prov_e, prov_v, prov_r) = miscutils.stringToVersion(provver)
- provtuple = (provname, provflag, (prov_e, prov_v, prov_r))
- # find the provide in the header
- providelist = self._providesList(matchhdr)
- for (name, flag, ver) in providelist:
- if name != provname: # definitely not
- continue
-
- match_n = name
- match_a = pkg_a # you got a better idea?
- if ver is not None:
- (match_e, match_v, match_r) = miscutils.stringToVersion(ver)
- else:
- match_e = pkg_e
- match_v = pkg_v
- match_r = pkg_r
-
- matchtuple = (match_n, match_a, match_e, match_v, match_r)
- # This provides matches if the version is in the requested
- # range or the providing package provides the resource
- # without a version (meaning that it matches all EVR)
- if miscutils.rangeCheck(provtuple, matchtuple) or (match_v == None):
- matches.append(pkgtuple)
- del matchingHdrs
- return miscutils.unique(matches)
-
- def _providesList(self, hdr):
- lst = []
- names = hdr[rpm.RPMTAG_PROVIDENAME]
- flags = hdr[rpm.RPMTAG_PROVIDEFLAGS]
- vers = hdr[rpm.RPMTAG_PROVIDEVERSION]
- if names is not None:
- lst = zip(names, flags, vers)
- return miscutils.unique(lst)
-
More information about the Yum-cvs-commits
mailing list