[yum-git] 2 commits - README.API_CHANGES yum/depsolve.py yum/__init__.py yum/packageSack.py yum/rpmsack.py yum/sqlitesack.py
Florian Festi
ffesti at linux.duke.edu
Fri May 23 13:45:45 UTC 2008
README.API_CHANGES | 11 ++++
yum/__init__.py | 12 ----
yum/depsolve.py | 42 -----------------
yum/packageSack.py | 99 ++++++++++------------------------------
yum/rpmsack.py | 128 +++++++++++++++--------------------------------------
yum/sqlitesack.py | 27 +++--------
6 files changed, 85 insertions(+), 234 deletions(-)
New commits:
commit e617465ff9769ef7e205c0fc6943b4c2b9d59793
Author: Florian Festi <ffesti at redhat.com>
Date: Fri May 23 15:40:17 2008 +0200
PackageSack API cleanup
Removed
PackagesSack.search(Provides|Requires|Conflicts|Obsoletes)
RpmSack.what(Provides|Requires)
SqliteSack.searchPrco
Added
PackagesSack.get(Conflicts|Obsoletes)
diff --git a/README.API_CHANGES b/README.API_CHANGES
new file mode 100644
index 0000000..ae451a8
--- /dev/null
+++ b/README.API_CHANGES
@@ -0,0 +1,11 @@
+
+4.0.0
+=====
+
+Removed:
+
+ * PackageSack.search(Provides|Requires|Conflicts|Obsoletes)
+ * use PackageSack.get* instead
+ * RpmSack(whatProvides|Requires)
+ * use PackageSack.get* instead
+ * SqliteSack.searchPrco
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 975a39b..4aeccbb 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -88,20 +88,12 @@ class PackageSackBase(object):
"""return dict { packages -> list of matching requires }"""
raise NotImplementedError()
- def searchRequires(self, name):
- """return list of package requiring the name (any evr and flag)"""
+ def getConflicts(self, name, flags=None, version=(None, None, None)):
+ """return dict { packages -> list of matching conflicts }"""
raise NotImplementedError()
- def searchProvides(self, name):
- """return list of package providing the name (any evr and flag)"""
- raise NotImplementedError()
-
- def searchConflicts(self, name):
- """return list of package conflicting with the name (any evr and flag)"""
- raise NotImplementedError()
-
- def searchObsoletes(self, name):
- """return list of package obsoleting the name (any evr and flag)"""
+ def getObsoletes(self, name, flags=None, version=(None, None, None)):
+ """return dict { packages -> list of matching obsoletes }"""
raise NotImplementedError()
def returnObsoletes(self, newest=False):
@@ -298,21 +290,13 @@ class MetaSack(PackageSackBase):
"""return dict { packages -> list of matching requires }"""
return self._computeAggregateDictResult("getRequires", name, flags, version)
- def searchRequires(self, name):
- """return list of package requiring the name (any evr and flag)"""
- return self._computeAggregateListResult("searchRequires", name)
-
- def searchProvides(self, name):
- """return list of package providing the name (any evr and flag)"""
- return self._computeAggregateListResult("searchProvides", name)
-
- def searchConflicts(self, name):
- """return list of package conflicting with the name (any evr and flag)"""
- return self._computeAggregateListResult("searchConflicts", name)
+ def getConflicts(self, name, flags=None, version=(None, None, None)):
+ """return dict { packages -> list of matching provides }"""
+ return self._computeAggregateDictResult("getConflicts", name, flags, version)
- def searchObsoletes(self, name):
- """return list of package obsoleting the name (any evr and flag)"""
- return self._computeAggregateListResult("searchObsoletes", name)
+ def getObsoletes(self, name, flags=None, version=(None, None, None)):
+ """return dict { packages -> list of matching requires }"""
+ return self._computeAggregateDictResult("getObsoletes", name, flags, version)
def returnObsoletes(self, newest=False):
"""returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
@@ -520,14 +504,20 @@ class PackageSack(PackageSackBase):
result.append(po)
return result
- def getProvides(self, name, flags=None, version=(None, None, None)):
- """return dict { packages -> list of matching provides }"""
+ def _getPRCO(self, PRCO, name, flags=None, version=(None, None, None)):
+ """return dict { packages -> list of matching RCO }"""
self._checkIndexes(failure='build')
result = { }
- for po in self.provides.get(name, []):
- hits = po.matchingPrcos('provides', (name, flags, version))
+ for po in getattr(self, PRCO).get(name, []):
+ hits = po.matchingPrcos(PRCO, (name, flags, version))
if hits:
result[po] = hits
+ return result
+
+ def getProvides(self, name, flags=None, version=(None, None, None)):
+ """return dict { packages -> list of matching provides }"""
+ self._checkIndexes(failure='build')
+ result = self._getPRCO('provides', name, flags, version)
if name[0] == '/':
hit = (name, None, (None, None, None))
for po in self.searchFiles(name):
@@ -535,50 +525,11 @@ class PackageSack(PackageSackBase):
return result
def getRequires(self, name, flags=None, version=(None, None, None)):
- """return dict { packages -> list of matching requires }"""
- self._checkIndexes(failure='build')
- result = { }
- for po in self.requires.get(name, []):
- hits = po.matchingPrcos('requires', (name, flags, version))
- if hits:
- result[po] = hits
- return result
-
- def searchRequires(self, name):
- """return list of package requiring the name (any evr and flag)"""
- self._checkIndexes(failure='build')
- if self.requires.has_key(name):
- return self.requires[name]
- else:
- return []
-
- def searchProvides(self, name):
- """return list of package providing the name (any evr and flag)"""
- # FIXME - should this do a pkgobj.checkPrco((name, flag, (e,v,r,))??
- # has to do a searchFiles and a searchProvides for things starting with /
- self._checkIndexes(failure='build')
- returnList = []
- if name[0] == '/':
- returnList.extend(self.searchFiles(name))
- if self.provides.has_key(name):
- returnList.extend(self.provides[name])
- return returnList
-
- def searchConflicts(self, name):
- """return list of package conflicting with the name (any evr and flag)"""
- self._checkIndexes(failure='build')
- if self.conflicts.has_key(name):
- return self.conflicts[name]
- else:
- return []
-
- def searchObsoletes(self, name):
- """return list of package obsoleting the name (any evr and flag)"""
- self._checkIndexes(failure='build')
- if self.obsoletes.has_key(name):
- return self.obsoletes[name]
- else:
- return []
+ return self._getPRCO('requires', name, flags, version)
+ def getConflicts(self, name, flags=None, version=(None, None, None)):
+ return self._getPRCO('conflicts', name, flags, version)
+ def getObsoletes(self, name, flags=None, version=(None, None, None)):
+ return self._getPRCO('obsoletes', name, flags, version)
def returnObsoletes(self, newest=False):
"""returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 7b08ab0..5a82e27 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -93,16 +93,11 @@ class RPMDBPackageSack(PackageSackBase):
self._tup2pkg = {}
self._completely_loaded = False
self._simple_pkgtup_list = []
- self._get_pro_cache = {}
- self._get_req_cache = {}
+ self._get_prco_cache = {'provides' : {},
+ 'requires' : {},
+ 'conflicts' : {},
+ 'obsoletes' : {}}
self.ts = None
-
- self._cache = {
- 'provides' : { },
- 'requires' : { },
- 'conflicts' : { },
- 'obsoletes' : { },
- }
def _get_pkglist(self):
'''Getter for the pkglist property.
@@ -122,15 +117,9 @@ class RPMDBPackageSack(PackageSackBase):
self._tup2pkg = {}
self._completely_loaded = False
self._simple_pkgtup_list = []
- self._get_pro_cache = {}
- self._get_req_cache = {}
+ for cache in self._get_prco_cache.values():
+ cache.clear()
misc.unshare_data()
- self._cache = {
- 'provides' : { },
- 'requires' : { },
- 'conflicts' : { },
- 'obsoletes' : { },
- }
def readOnlyTS(self):
if not self.ts:
@@ -186,43 +175,6 @@ class RPMDBPackageSack(PackageSackBase):
result = result.values()
return result
- def searchPrco(self, name, prcotype):
-
- result = self._cache[prcotype].get(name)
- if result is not None:
- return result
-
- ts = self.readOnlyTS()
- result = {}
- tag = self.DEP_TABLE[prcotype][0]
- mi = ts.dbMatch(tag, name)
- for hdr in mi:
- po = self._makePackageObject(hdr, mi.instance())
- result[po.pkgid] = po
- del mi
-
- # If it's not a provides or filename, we are done
- if prcotype == 'provides' and name[0] == '/':
- fileresults = self.searchFiles(name)
- for pkg in fileresults:
- result[pkg.pkgid] = pkg
-
- result = result.values()
- self._cache[prcotype][name] = result
- return result
-
- def searchProvides(self, name):
- return self.searchPrco(name, 'provides')
-
- def searchRequires(self, name):
- return self.searchPrco(name, 'requires')
-
- def searchObsoletes(self, name):
- return self.searchPrco(name, 'obsoletes')
-
- def searchConflicts(self, name):
- return self.searchPrco(name, 'conflicts')
-
def simplePkgList(self):
return self.pkglist
@@ -525,63 +477,57 @@ class RPMDBPackageSack(PackageSackBase):
misc.share_data(r_r)))
return misc.share_data(deptup)
- def getProvides(self, name, flags=None, version=(None, None, None)):
+ def _getPRCO(self, PRCO, name, flags=None, version=(None, None, None)):
"""searches the rpmdb for what provides the arguments
returns a list of pkgtuples of providing packages, possibly empty"""
name = misc.share_data(name)
deptup = self._genDeptup(name, flags, version)
- if deptup in self._get_pro_cache:
- return self._get_pro_cache[deptup]
+ if deptup in self._get_prco_cache[PRCO]:
+ return self._get_prco_cache[PRCO][deptup]
r_v = deptup[2][1]
+
+ ts = self.readOnlyTS()
+ result = {}
+ tag = self.DEP_TABLE[prcotype][0]
+ mi = ts.dbMatch(tag, name)
+ for hdr in mi:
+ po = self._makePackageObject(hdr, mi.instance())
+ result[po.pkgid] = po
+ del mi
+
+ # If it's not a provides or filename, we are done
+ if PRCO == 'provides' and name[0] == '/':
+ fileresults = self.searchFiles(name)
+ for pkg in fileresults:
+ result[pkg.pkgid] = pkg
- pkgs = self.searchProvides(name)
-
- result = { }
-
+ pkgs = result.values()
+ result = {}
+
for po in pkgs:
if name[0] == '/' and r_v is None:
+ # file dep add all matches to the defSack
result[po] = [(name, None, (None, None, None))]
continue
- hits = po.matchingPrcos('provides', deptup)
+ hits = po.matchingPrcos(PRCO, deptup)
if hits:
result[po] = hits
- self._get_pro_cache[deptup] = result
+ self._get_prco_cache[PRCO][deptup] = result
return result
- def whatProvides(self, name, flags, version):
- # XXX deprecate?
- return [po.pkgtup for po in self.getProvides(name, flags, version)]
+ def getProvides(self, name, flags=None, version=(None, None, None)):
+ return self._getPRCO('provides', name, flags, version)
def getRequires(self, name, flags=None, version=(None, None, None)):
- """searches the rpmdb for what provides the arguments
- returns a list of pkgtuples of providing packages, possibly empty"""
-
- name = misc.share_data(name)
- deptup = self._genDeptup(name, flags, version)
- if deptup in self._get_req_cache:
- return self._get_req_cache[deptup]
- r_v = deptup[2][1]
+ return self._getPRCO('requires', name, flags, version)
- pkgs = self.searchRequires(name)
+ def getConflicts(self, name, flags=None, version=(None, None, None)):
+ return self._getPRCO('conflicts', name, flags, version)
- result = { }
+ def getObsoletes(self, name, flags=None, version=(None, None, None)):
+ return self._getPRCO('obsoletes', name, flags, version)
- for po in pkgs:
- if name[0] == '/' and r_v is None:
- # file dep add all matches to the defSack
- result[po] = [(name, None, (None, None, None))]
- continue
- hits = po.matchingPrcos('requires', deptup)
- if hits:
- result[po] = hits
- self._get_req_cache[deptup] = result
- return result
-
- def whatRequires(self, name, flags, version):
- # XXX deprecate?
- return [po.pkgtup for po in self.getRequires(name, flags, version)]
-
def main():
sack = RPMDBPackageSack('/')
for p in sack.simplePkgList():
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 0b5d3e1..786f06a 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -414,7 +414,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
# or provide a file containing name
def searchAll(self,name, query_type='like'):
# this function is just silly and it reduces down to just this
- return self.searchPrco(name, 'provides')
+ return self._searchPrco(name, 'provides')
def _sql_pkgKey2po(self, repo, cur, pkgs=None):
""" Takes a cursor and maps the pkgKey rows into a list of packages. """
@@ -747,9 +747,15 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
def getRequires(self, name, flags=None, version=(None, None, None)):
return self._search("requires", name, flags, version)
+ def getConflicts(self, name, flags=None, version=(None, None, None)):
+ return self._search("conflicts", name, flags, version)
+
+ def getObsoletes(self, name, flags=None, version=(None, None, None)):
+ return self._search("obsoletes", name, flags, version)
+
@catchSqliteException
- def searchPrco(self, name, prcotype):
+ def _searchPrco(self, name, prcotype):
"""return list of packages having prcotype name (any evr and flag)"""
glob = True
querytype = 'glob'
@@ -830,23 +836,6 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
#~ return results
- def searchProvides(self, name):
- """return list of packages providing name (any evr and flag)"""
- return self.searchPrco(name, "provides")
-
- def searchRequires(self, name):
- """return list of packages requiring name (any evr and flag)"""
- return self.searchPrco(name, "requires")
-
- def searchObsoletes(self, name):
- """return list of packages obsoleting name (any evr and flag)"""
- return self.searchPrco(name, "obsoletes")
-
- def searchConflicts(self, name):
- """return list of packages conflicting with name (any evr and flag)"""
- return self.searchPrco(name, "conflicts")
-
-
def db2class(self, db, nevra_only=False):
print 'die die die die die db2class'
pass
commit 8ac246a33310a9f516b04a9b7c81631d54fe003f
Author: Florian Festi <ffesti at redhat.com>
Date: Fri Nov 30 15:02:39 2007 +0100
Remove Depsolve.whatProvides
diff --git a/yum/__init__.py b/yum/__init__.py
index cd75ced..1be6237 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1485,12 +1485,7 @@ class YumBase(depsolve.Depsolve):
if r.startswith('rpmlib('):
continue
- satisfiers = []
-
- for po in self.whatProvides(r, f, v):
- satisfiers.append(po)
-
- pkgresults[req] = satisfiers
+ pkgresults[req] = self.pkgs.getProvides(r, f, v).keys()
return results
@@ -1961,10 +1956,7 @@ class YumBase(depsolve.Depsolve):
raise Errors.YumBaseError, _('Invalid version flag')
depflags = SYMBOLFLAGS[flagsymbol]
- sack = self.whatProvides(depname, depflags, depver)
- results = sack.returnPackages()
- return results
-
+ return self.pkgSack.getProvides(depname, depflags, depver).keys()
def returnPackageByDep(self, depstring):
"""Pass in a generic [build]require string and this function will
diff --git a/yum/depsolve.py b/yum/depsolve.py
index a08f481..5bc3c7f 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -141,45 +141,6 @@ class Depsolve(object):
for flag in self.tsInfo.probFilterFlags:
probfilter |= flag
self._ts.setProbFilter(probfilter)
-
- def whatProvides(self, name, flags, version):
- """searches the packageSacks for what provides the arguments
- returns a ListPackageSack of providing packages, possibly empty"""
-
- self.verbose_logger.log(logginglevels.DEBUG_1, _('Searching pkgSack for dep: %s'),
- name)
- # we need to check the name - if it doesn't match:
- # /etc/* bin/* or /usr/lib/sendmail then we should fetch the
- # filelists.xml for all repos to make the searchProvides more complete.
- if name[0] == '/':
- if not misc.re_primary_filename(name):
- self.doSackFilelistPopulate()
-
- pkgs = self.pkgSack.searchProvides(name)
-
-
- if flags == 0:
- flags = None
- if type(version) in (types.StringType, types.NoneType, types.UnicodeType):
- (r_e, r_v, r_r) = rpmUtils.miscutils.stringToVersion(version)
- elif type(version) in (types.TupleType, types.ListType): # would this ever be a ListType?
- (r_e, r_v, r_r) = version
-
- defSack = ListPackageSack() # holder for items definitely providing this dep
-
- for po in pkgs:
- self.verbose_logger.log(logginglevels.DEBUG_2,
- _('Potential match for %s from %s'), name, po)
- if name[0] == '/' and r_v is None:
- # file dep add all matches to the defSack
- defSack.addPackage(po)
- continue
-
- if po.checkPrco('provides', (name, flags, (r_e, r_v, r_r))):
- defSack.addPackage(po)
- self.verbose_logger.debug(_('Matched %s to require for %s'), po, name)
-
- return defSack
def allowedMultipleInstalls(self, po):
"""takes a packageObject, returns 1 or 0 depending on if the package
@@ -427,7 +388,8 @@ class Depsolve(object):
# - if they are the same
# - be confused but continue
- provSack = self.whatProvides(needname, needflags, needversion)
+ provSack = ListPackageSack(self.pkgSack.getProvides(
+ needname, needflags or None, rpmUtils.miscutils.stringToVersion(needversion)))
# get rid of things that are already in the rpmdb - b/c it's pointless to use them here
More information about the Yum-cvs-commits
mailing list