[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