[Yum-devel] [PATCH] Fix the docs. for have_fast*
James Antill
james at and.org
Thu Apr 15 16:41:10 UTC 2010
Rename it from have_fastSearchFiles to have_fastReturnFileEntries to
better reflect what it means.
Add a dummy to PO, as that's the logical place for it even though it
needs to be in the sack for sqlite to get the answer.
Add some docs. to the package object classes, while we are here.
---
test/testbase.py | 2 +-
yum/__init__.py | 2 +-
yum/packageSack.py | 9 ++++++---
yum/packages.py | 38 ++++++++++++++++++++++++++++++++------
yum/sqlitesack.py | 16 +++++++++-------
yum/transactioninfo.py | 2 +-
6 files changed, 50 insertions(+), 19 deletions(-)
diff --git a/test/testbase.py b/test/testbase.py
index 44d1959..fa2e512 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -51,7 +51,7 @@ class FakeSack:
def __init__(self):
pass # This is fake, so do nothing
- def have_fastSearchFiles(self):
+ def have_fastReturnFileEntries(self):
return True
class FakeRepo(object):
diff --git a/yum/__init__.py b/yum/__init__.py
index cc5064e..9e8fad9 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -4409,7 +4409,7 @@ class YumBase(depsolve.Depsolve):
if pkg1.name != pkg2.name:
return False
- if not pkg1.EVR > pkg2.EVR:
+ if pkg1.verLE(pkg2):
return False
if pkg1.arch not in self.arch.archlist:
return False
diff --git a/yum/packageSack.py b/yum/packageSack.py
index e63a8d7..dbe54bf 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -152,8 +152,9 @@ class PackageSackBase(object):
"""returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
raise NotImplementedError()
- def have_fastSearchFiles(self):
- """ Is calling searchFiles() faster than using """
+ def have_fastReturnFileEntries(self):
+ """ Is calling pkg.returnFileEntries(primary_only=True) faster than
+ using searchFiles(). """
raise NotImplementedError()
def searchFiles(self, name):
@@ -776,7 +777,9 @@ class PackageSack(PackageSackBase):
return obs
- def have_fastSearchFiles(self):
+ def have_fastReturnFileEntries(self):
+ """ Is calling pkg.returnFileEntries(primary_only=True) faster than
+ using searchFiles(). """
return True
def searchFiles(self, name):
diff --git a/yum/packages.py b/yum/packages.py
index 289660d..731d217 100644
--- a/yum/packages.py
+++ b/yum/packages.py
@@ -159,7 +159,9 @@ class FakeSack:
def __init__(self):
pass # This is fake, so do nothing
- def have_fastSearchFiles(self):
+ def have_fastReturnFileEntries(self):
+ """ Is calling pkg.returnFileEntries(primary_only=True) faster than
+ using searchFiles(). """
return True
def delPackage(self, obj):
@@ -213,8 +215,10 @@ class FakeRepository:
return self.id
-# goal for the below is to have a packageobject that can be used by generic
+# Goal for the below is to have a packageobject that can be used by generic
# functions independent of the type of package - ie: installed or available
+# Note that this is also used to history etc. ... so it's more a nevra+checksum
+# holder than a base for things which are actual packages.
class PackageObject(object):
"""Base Package Object - sets up the default storage dicts and the
most common returns"""
@@ -299,11 +303,16 @@ class PackageObject(object):
def verEQ(self, other):
""" Compare package to another one, only rpm-version equality. """
if not other:
- return False
+ return None
ret = cmp(self.name, other.name)
if ret != 0:
return False
return comparePoEVREQ(self, other)
+ def verNE(self, other):
+ """ Compare package to another one, only rpm-version inequality. """
+ if not other:
+ return None
+ return not self.verEQ(other)
def verLT(self, other):
""" Uses verCMP, tests if the other _rpm-version_ is < ours. """
return self.verCMP(other) < 0
@@ -335,6 +344,10 @@ class PackageObject(object):
if csumid:
return (csumtype, csum)
+# This is the virtual base class of actual packages, it basically requires a
+# repo. even though it doesn't set one up in it's __init__. It also doesn't have
+# PackageObject methods ... so is basically unusable on it's own
+# see: YumAvailablePackage.
class RpmBase(object):
"""return functions and storage for rpm-specific data"""
@@ -561,11 +574,18 @@ class RpmBase(object):
base_package_name = property(fget=lambda self: self._getBaseName())
+ def have_fastReturnFileEntries(self):
+ """ Is calling pkg.returnFileEntries(primary_only=True) faster than
+ using searchFiles(). """
+ return self.repo.sack.have_fastReturnFileEntries()
+
+# This is kind of deprecated
class PackageEVR:
"""
- A comparable epoch, version, and release representation.
+ A comparable epoch, version, and release representation. Note that you
+ almost certainly want to use pkg.verEQ() or pkg.verGT() etc. instead.
"""
def __init__(self,e,v,r):
@@ -608,7 +628,8 @@ class PackageEVR:
return False
-
+# This is the real base class of actual packages, it has a repo. and is
+# usable on it's own, in theory (but in practise see sqlitesack).
class YumAvailablePackage(PackageObject, RpmBase):
"""derived class for the packageobject and RpmBase packageobject yum
uses this for dealing with packages in a repository"""
@@ -1124,7 +1145,8 @@ class YumAvailablePackage(PackageObject, RpmBase):
-
+# This is a tweak on YumAvailablePackage() and is a base class for packages
+# which are actual rpms.
class YumHeaderPackage(YumAvailablePackage):
"""Package object built from an rpm header"""
def __init__(self, repo, hdr):
@@ -1364,6 +1386,7 @@ _RPMVERIFY_RDEV = (1 << 7)
_installed_repo = FakeRepository('installed')
_installed_repo.cost = 0
+# This is a tweak on YumHeaderPackage() for installed rpm packages.
class YumInstalledPackage(YumHeaderPackage):
"""super class for dealing with packages in the rpmdb"""
def __init__(self, hdr, yumdb=None):
@@ -1627,6 +1650,7 @@ class YumInstalledPackage(YumHeaderPackage):
return results
+# This is a tweak on YumHeaderPackage() for rpm packages which are on disk.
class YumLocalPackage(YumHeaderPackage):
"""Class to handle an arbitrary package from a file path
this inherits most things from YumInstalledPackage because
@@ -1770,6 +1794,8 @@ class YumLocalPackage(YumHeaderPackage):
return msg
+# This is a tweak on YumLocalPackage() to download rpm packages to disk, and
+# then use them directly.
class YumUrlPackage(YumLocalPackage):
"""Class to handle an arbitrary package from a URL
this inherits most things from YumLocalPackage, but will download a
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 74c793a..1885d57 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -842,9 +842,9 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return misc.unique(results)
@catchSqliteException
- def _have_fastSearchFiles(self):
- """ Return true if searchFiles() is always fast, basically relies on
- "CREATE INDEX pkgfiles ON files (pkgKey);" existing. """
+ def _have_fastReturnFileEntries(self):
+ """ Return true if pkg.returnFileEntries(primary_only=True) is fast.
+ basically does "CREATE INDEX pkgfiles ON files (pkgKey);" exist. """
for (rep,cache) in self.primarydb.items():
if rep in self._all_excludes:
@@ -860,10 +860,12 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return True
- def have_fastSearchFiles(self):
- if not hasattr(self, '_cached_have_fastSearchFiles'):
- self._cached_have_fastSearchFiles = self._have_fastSearchFiles()
- return self._cached_have_fastSearchFiles
+ def have_fastReturnFileEntries(self):
+ """ Is calling pkg.returnFileEntries(primary_only=True) faster than
+ using searchFiles(). """
+ if not hasattr(self, '_cached_fRFE'):
+ self._cached_fRFE = self._have_fastReturnFileEntries()
+ return self._cached_fRFE
@catchSqliteException
def searchFiles(self, name, strict=False):
diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index cad36f4..d7d8859 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -237,7 +237,7 @@ class TransactionData:
elif isinstance(txmember.po, YumAvailablePackageSqlite):
self.pkgSackPackages += 1
if self._inSack is not None and txmember.output_state in TS_INSTALL_STATES:
- if not txmember.po.repo.sack.have_fastSearchFiles():
+ if not txmember.po.have_fastReturnFileEntries():
# In theory we could keep this on if a "small" repo. fails
self._inSack = None
else:
--
1.6.6.1
More information about the Yum-devel
mailing list