[yum-git] Branch 'yum-3_2_X' - yum/__init__.py yum/packageSack.py yum/sqlitesack.py
James Antill
james at linux.duke.edu
Thu Jul 3 15:53:38 UTC 2008
yum/__init__.py | 28 +++++++++++++++---------
yum/packageSack.py | 60 +++++++++++++++++++++++++++++++----------------------
yum/sqlitesack.py | 24 ++++++++++++++-------
3 files changed, 70 insertions(+), 42 deletions(-)
New commits:
commit acccc16583d452524566db198ded75b508f8363d
Author: James Antill <james at and.org>
Date: Thu Jul 3 11:47:43 2008 -0400
Add ignore_case with patterns argument, to fix commands (eg. list)
diff --git a/yum/__init__.py b/yum/__init__.py
index 016a0e9..c8877fa 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1345,12 +1345,13 @@ class YumBase(depsolve.Depsolve):
recent = []
extras = []
+ ic = ignore_case
# list all packages - those installed and available, don't 'think about it'
if pkgnarrow == 'all':
dinst = {}
ndinst = {} # Newest versions by name.arch
for po in self.rpmdb.returnPackages(patterns=patterns,
- ignore_case=ignore_case):
+ ignore_case=ic):
dinst[po.pkgtup] = po;
if showdups:
continue
@@ -1360,10 +1361,12 @@ class YumBase(depsolve.Depsolve):
installed = dinst.values()
if showdups:
- avail = self.pkgSack.returnPackages(patterns=patterns)
+ avail = self.pkgSack.returnPackages(patterns=patterns,
+ ignore_case=ic)
else:
del dinst # Using ndinst instead
- avail = self.pkgSack.returnNewestByNameArch(patterns=patterns)
+ avail = self.pkgSack.returnNewestByNameArch(patterns=patterns,
+ ignore_case=ic)
for pkg in avail:
if showdups:
@@ -1393,15 +1396,17 @@ class YumBase(depsolve.Depsolve):
# installed only
elif pkgnarrow == 'installed':
installed = self.rpmdb.returnPackages(patterns=patterns,
- ignore_case=ignore_case)
+ ignore_case=ic)
# available in a repository
elif pkgnarrow == 'available':
if showdups:
- avail = self.pkgSack.returnPackages(patterns=patterns)
+ avail = self.pkgSack.returnPackages(patterns=patterns,
+ ignore_case=ic)
else:
- avail = self.pkgSack.returnNewestByNameArch(patterns=patterns)
+ avail = self.pkgSack.returnNewestByNameArch(patterns=patterns,
+ ignore_case=ic)
for pkg in avail:
if showdups:
@@ -1417,9 +1422,10 @@ class YumBase(depsolve.Depsolve):
elif pkgnarrow == 'extras':
# we must compare the installed set versus the repo set
# anything installed but not in a repo is an extra
- avail = self.pkgSack.simplePkgList(patterns=patterns)
+ avail = self.pkgSack.simplePkgList(patterns=patterns,
+ ignore_case=ic)
for po in self.rpmdb.returnPackages(patterns=patterns,
- ignore_case=ignore_case):
+ ignore_case=ic):
if po.pkgtup not in avail:
extras.append(po)
@@ -1441,9 +1447,11 @@ class YumBase(depsolve.Depsolve):
recentlimit = now-(self.conf.recent*86400)
ftimehash = {}
if showdups:
- avail = self.pkgSack.returnPackages(patterns=patterns)
+ avail = self.pkgSack.returnPackages(patterns=patterns,
+ ignore_case=ic)
else:
- avail = self.pkgSack.returnNewestByNameArch(patterns=patterns)
+ avail = self.pkgSack.returnNewestByNameArch(patterns=patterns,
+ ignore_case=ic)
for po in avail:
ftime = int(po.filetime)
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 7368655..75b883d 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -130,24 +130,25 @@ class PackageSackBase(object):
"""delete a pkgobject"""
raise NotImplementedError()
- def returnPackages(self, repoid=None, patterns=None):
+ def returnPackages(self, repoid=None, patterns=None, ignore_case=False):
"""return list of all packages"""
raise NotImplementedError()
- def returnNewestByNameArch(self, naTup=None, patterns=None):
+ def returnNewestByNameArch(self, naTup=None,
+ patterns=None, ignore_case=False):
"""return list of newest packages based on name, arch matching
this means(in name.arch form): foo.i386 and foo.noarch are not
compared to each other for highest version only foo.i386 and
foo.i386 will be compared"""
raise NotImplementedError()
- def returnNewestByName(self, name=None):
+ def returnNewestByName(self, name=None, patterns=None, ignore_case=False):
"""return list of newest packages based on name matching
this means(in name.arch form): foo.i386 and foo.noarch will
be compared to each other for highest version"""
raise NotImplementedError()
- def simplePkgList(self, patterns=None):
+ def simplePkgList(self, patterns=None, ignore_case=False):
"""returns a list of pkg tuples (n, a, e, v, r)"""
raise NotImplementedError()
@@ -233,8 +234,6 @@ class PackageSackBase(object):
req[r] = set()
req[r].add(po)
-
-
for po in self.returnPackages(repoid=repoid):
preq = 0
for p in po.provides_names + po.filelist + po.dirlist + po.ghostlist:
@@ -361,38 +360,47 @@ class MetaSack(PackageSackBase):
obj.repo.sack.delPackage(obj)
- def returnPackages(self, repoid=None, patterns=None):
+ def returnPackages(self, repoid=None, patterns=None, ignore_case=False):
"""return list of all packages, takes optional repoid"""
if not repoid:
return self._computeAggregateListResult("returnPackages",
- None, patterns)
- return self.sacks[repoid].returnPackages(patterns=patterns)
+ None, patterns, ignore_case)
+ return self.sacks[repoid].returnPackages(patterns=patterns,
+ ignore_case=ignore_case)
- def returnNewestByNameArch(self, naTup=None, patterns=None):
+ def returnNewestByNameArch(self, naTup=None,
+ patterns=None, ignore_case=False):
"""return list of newest packages based on name, arch matching
this means(in name.arch form): foo.i386 and foo.noarch are not
compared to each other for highest version only foo.i386 and
foo.i386 will be compared"""
calr = self._computeAggregateListResult
- pkgs = calr("returnNewestByNameArch", naTup, patterns)
+ pkgs = calr("returnNewestByNameArch", naTup, patterns, ignore_case)
pkgs = packagesNewestByNameArch(pkgs)
if not pkgs:
- raise PackageSackError, 'No Package Matching %s' % ", ".join(patterns or [])
+ ui_pats = ", ".join(patterns or [])
+ raise PackageSackError, 'No Package Matching %s' % ui_pats
return pkgs
- def returnNewestByName(self, name=None):
+ def returnNewestByName(self, name=None, patterns=None, ignore_case=False):
"""return list of newest packages based on name matching
this means(in name.arch form): foo.i386 and foo.noarch will
be compared to each other for highest version"""
- pkgs = self._computeAggregateListResult("returnNewestByName", name)
+ pkgs = self._computeAggregateListResult("returnNewestByName", name,
+ patterns, ignore_case)
pkgs = packagesNewestByName(pkgs)
if not pkgs:
- raise PackageSackError, 'No Package Matching %s' % name
+ if name:
+ ui_pats = name
+ else:
+ ui_pats = ", ".join(patterns or [])
+ raise PackageSackError, 'No Package Matching %s' % ui_pats
return pkgs
- def simplePkgList(self, patterns=None):
+ def simplePkgList(self, patterns=None, ignore_case=False):
"""returns a list of pkg tuples (n, a, e, v, r)"""
- return self._computeAggregateListResult("simplePkgList", patterns)
+ return self._computeAggregateListResult("simplePkgList",
+ patterns, ignore_case)
def printPackages(self):
for sack in self.sacks.values():
@@ -730,7 +738,7 @@ class PackageSack(PackageSackBase):
if self.indexesBuilt:
self._delPackageFromIndex(obj)
- def returnPackages(self, repoid=None, patterns=None):
+ def returnPackages(self, repoid=None, patterns=None, ignore_case=False):
"""return list of all packages, takes optional repoid"""
returnList = []
if repoid is None:
@@ -745,7 +753,8 @@ class PackageSack(PackageSackBase):
return returnList
- def returnNewestByNameArch(self, naTup=None, patterns=None):
+ def returnNewestByNameArch(self, naTup=None,
+ patterns=None, ignore_case=False):
"""return list of newest packages based on name, arch matching
this means(in name.arch form): foo.i386 and foo.noarch are not
compared to each other for highest version only foo.i386 and
@@ -759,7 +768,8 @@ class PackageSack(PackageSackBase):
if (not where):
raise PackageSackError, 'No Package Matching %s.%s' % naTup
else:
- where = self.returnPackages(patterns=patterns)
+ where = self.returnPackages(patterns=patterns,
+ ignore_case=ignore_case)
for pkg in where:
if not highdict.has_key((pkg.name, pkg.arch)):
@@ -777,12 +787,13 @@ class PackageSack(PackageSackBase):
return highdict.values()
- def returnNewestByName(self, name=None, patterns=None):
+ def returnNewestByName(self, name=None, patterns=None, ignore_case=False):
"""return list of newest packages based on name matching
this means(in name.arch form): foo.i386 and foo.noarch will
be compared to each other for highest version"""
highdict = {}
- for pkg in self.returnPackages(patterns=patterns):
+ for pkg in self.returnPackages(patterns=patterns,
+ ignore_case=ignore_case):
if not highdict.has_key(pkg.name):
highdict[pkg.name] = []
highdict[pkg.name].append(pkg)
@@ -807,11 +818,12 @@ class PackageSack(PackageSackBase):
return returnlist
- def simplePkgList(self, patterns=None):
+ def simplePkgList(self, patterns=None, ignore_case=False):
"""returns a list of pkg tuples (n, a, e, v, r) optionally from a single repoid"""
# Don't cache due to excludes
- return [pkg.pkgtup for pkg in self.returnPackages(patterns=patterns)]
+ return [pkg.pkgtup for pkg in self.returnPackages(patterns=patterns,
+ ignore_case=False)]
def printPackages(self):
for pkg in self.returnPackages():
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 7f00c83..c0f8839 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -906,13 +906,14 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return y
@catchSqliteException
- def returnNewestByNameArch(self, naTup=None, patterns=None):
+ def returnNewestByNameArch(self, naTup=None, patterns=None, ignore_case=False):
# If naTup is set do it from the database otherwise use our parent's
# returnNewestByNameArch
if (not naTup):
return yumRepo.YumPackageSack.returnNewestByNameArch(self, naTup,
- patterns)
+ patterns,
+ ignore_case)
# First find all packages that fulfill naTup
allpkg = []
@@ -927,11 +928,13 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return misc.newestInList(allpkg)
@catchSqliteException
- def returnNewestByName(self, name=None):
+ def returnNewestByName(self, name=None, patterns=None, ignore_case=False):
# If name is set do it from the database otherwise use our parent's
# returnNewestByName
if (not name):
- return yumRepo.YumPackageSack.returnNewestByName(self, name)
+ return yumRepo.YumPackageSack.returnNewestByName(self, name,
+ patterns,
+ ignore_case)
# First find all packages that fulfill name
allpkg = []
@@ -974,7 +977,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return exactmatch, matched, unmatched
@catchSqliteException
- def _buildPkgObjList(self, repoid=None, patterns=None):
+ def _buildPkgObjList(self, repoid=None, patterns=None, ignore_case=False):
"""Builds a list of packages, only containing nevra information. No
excludes are done at this stage. """
@@ -995,7 +998,12 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
for field in ['name', 'sql_nameArch', 'sql_nameVerRelArch',
'sql_nameVer', 'sql_nameVerRel',
'sql_envra', 'sql_nevra']:
- pat_sqls.append("%s GLOB ?" % field)
+ if ignore_case:
+ pattern = pattern.replace("*", "%")
+ pattern = pattern.replace("?", "_")
+ pat_sqls.append("%s LIKE ?" % field)
+ else:
+ pat_sqls.append("%s GLOB ?" % field)
pat_data.append(pattern)
if pat_sqls:
qsql = _FULL_PARSE_QUERY_BEG + " OR ".join(pat_sqls)
@@ -1011,7 +1019,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
self.pkgobjlist = returnList
return returnList
- def returnPackages(self, repoid=None, patterns=None):
+ def returnPackages(self, repoid=None, patterns=None, ignore_case=False):
"""Returns a list of packages, only containing nevra information. The
packages are processed for excludes. Note that patterns is just
a hint, we are free it ignore it. """
@@ -1028,7 +1036,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
if hasattr(self, 'pkgobjlist'):
pkgobjlist = self.pkgobjlist
else:
- pkgobjlist = self._buildPkgObjList(repoid, patterns)
+ pkgobjlist = self._buildPkgObjList(repoid, patterns, ignore_case)
returnList = []
for po in pkgobjlist:
More information about the Yum-cvs-commits
mailing list