Hi!
Attached patch cleans up the code a bitz by moving from whatProvides to
getProvides. It also uses getProvides to implement whatProvides.
Only interesting issue is that it circumvents the
YumBase.doSackFilelistPopulate() call and leaves the stup of the filelist to
the underlaying Sack objects. This shouldn't be a problem but may
change/reduce the debugging/info output.
Can someone please comment if this is a problem?
Additionally this raises the question is if doSackFilelistPopulate() is
needed at all.
Florian
>From 273e7d46a395aa45477f93ad8900ac6647ae0536 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Fri, 30 Nov 2007 15:02:39 +0100
Subject: [PATCH] Remove usage of Depsolve.whatProvides
Simplify Depsolve.whatProvides to use PackageSack.getProvides()
---
yum/__init__.py | 11 ++---------
yum/depsolve.py | 39 +--------------------------------------
2 files changed, 3 insertions(+), 47 deletions(-)
diff --git a/yum/__init__.py b/yum/__init__.py
index f9618bc..28cec04 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1258,12 +1258,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
@@ -1731,9 +1726,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.getProvides(depname, depflags, depver).keys()
def returnPackageByDep(self, depstring):
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 25f5f76..acbcc65 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -133,44 +133,7 @@ class Depsolve(object):
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] == '/':
- matched = 0
- globs = ['.*bin\/.*', '^\/etc\/.*', '^\/usr\/lib\/sendmail$']
- for glob in globs:
- globc = re.compile(glob)
- if globc.match(name):
- matched = 1
- if not matched:
- 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
+ return ListPackageSack(self.pkgSack.getProvides(name, flags, version).keys())
def allowedMultipleInstalls(self, po):
"""takes a packageObject, returns 1 or 0 depending on if the package
--
1.5.3.3
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel