rpms/yum/devel yum-HEAD.patch,1.44,1.45 yum.spec,1.300,1.301

James Antill james at fedoraproject.org
Fri Feb 26 04:25:15 UTC 2010


Author: james

Update of /cvs/pkgs/rpms/yum/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv12109

Modified Files:
	yum-HEAD.patch yum.spec 
Log Message:
* Thu Feb 24 2010 James Antill <james at fedoraproject.org> - 3.2.26-5
- new HEAD, minor features and speed.


yum-HEAD.patch:
 Makefile                 |   12 
 b/Makefile               |   15 
 b/po/es.po               | 1637 ++++++++++++++++------------
 b/po/fi.po               | 1338 +++++++++++++----------
 b/po/fr.po               |   14 
 b/po/it.po               | 1533 ++++++++++++++------------
 b/po/pa.po               | 2679 ++++++++++++++++++++++++++++++++++++++++++++++-
 b/po/pl.po               | 1362 +++++++++++++----------
 b/po/yum.pot             | 1290 ++++++++++++----------
 b/utils.py               |    3 
 b/yum/__init__.py        |    3 
 b/yum/depsolve.py        |   25 
 b/yum/history.py         |   29 
 b/yum/i18n.py            |   11 
 b/yum/misc.py            |   35 
 b/yum/packageSack.py     |   66 -
 b/yum/packages.py        |    1 
 b/yum/pkgtag_db.py       |   12 
 b/yum/rpmsack.py         |    9 
 b/yum/sqlitesack.py      |   38 
 b/yum/sqlutils.py        |   25 
 b/yum/transactioninfo.py |    8 
 po/es.po                 |  253 ++--
 po/it.po                 |  716 ++++++------
 po/pl.po                 |  210 +--
 po/yum.pot               |  195 +--
 yum/__init__.py          |   50 
 yum/history.py           |    2 
 yum/misc.py              |    7 
 yum/packageSack.py       |   36 
 yum/packages.py          |    9 
 yum/pkgtag_db.py         |    4 
 yum/rpmsack.py           |   96 +
 yum/sqlitesack.py        |   49 
 34 files changed, 7735 insertions(+), 4037 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.44 -r 1.45 yum-HEAD.patchIndex: yum-HEAD.patch
===================================================================
RCS file: /cvs/pkgs/rpms/yum/devel/yum-HEAD.patch,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -p -r1.44 -r1.45
--- yum-HEAD.patch	18 Feb 2010 04:05:27 -0000	1.44
+++ yum-HEAD.patch	26 Feb 2010 04:25:13 -0000	1.45
@@ -1,178 +1,382 @@
-diff --git a/po/es.po b/po/es.po
-index 49bf1c4..d9badab 100644
---- a/po/es.po
-+++ b/po/es.po
-@@ -1,15 +1,16 @@
- # Fedora Spanish translation of yum.yum-3_2_X.
- # This file is distributed under the same license as the yum.yum-3_2_X. package.
--# Héctor Daniel Cabrera <h.daniel.cabrera at gmail.com>, 2009.
-+# 
- # Domingo Becker <domingobecker at gmail.com>, 2009.
-+# Héctor Daniel Cabrera <logan at fedoraproject.org>, 2009, 2010.
- #
- msgid ""
+From f86b0129812bdb3a95058bb0559fb624e330cfd7 Mon Sep 17 00:00:00 2001
+From: Seth Vidal <skvidal at fedoraproject.org>
+Date: Wed, 10 Feb 2010 10:32:02 -0500
+Subject: [PATCH 01/29] cleanup sql_esc[_glob]
+
+move sql_esc and sql_esc_glob to sqlutils from sqlitesack
+add sql_esc'ing to pkgtag db calls
+remove sql_esc duplication from history.py
+---
+ yum/history.py    |   29 ++---------------------------
+ yum/pkgtag_db.py  |   12 +++++++-----
+ yum/sqlitesack.py |   38 ++++++--------------------------------
+ yum/sqlutils.py   |   24 ++++++++++++++++++++++++
+ 4 files changed, 39 insertions(+), 64 deletions(-)
+
+diff --git a/yum/history.py b/yum/history.py
+index 8de7459..e9ea94a 100644
+--- a/yum/history.py
++++ b/yum/history.py
+@@ -22,7 +22,7 @@ import os, os.path
+ import glob
+ from weakref import proxy as weakref
+ 
+-from sqlutils import sqlite, executeSQL
++from sqlutils import sqlite, executeSQL, sql_esc, sql_esc_glob
+ import yum.misc as misc
+ import yum.constants
+ from yum.constants import *
+@@ -55,31 +55,6 @@ _sttxt2stcode = {'Update' : TS_UPDATE,
+                  'Obsoleted' : TS_OBSOLETED,
+                  'Obsoleting' : TS_OBSOLETING}
+ 
+-# ---- horrible Copy and paste from sqlitesack ----
+-def _sql_esc(pattern):
+-    """ Apply SQLite escaping, if needed. Returns pattern and esc. """
+-    esc = ''
+-    if "_" in pattern or "%" in pattern:
+-        esc = ' ESCAPE "!"'
+-        pattern = pattern.replace("!", "!!")
+-        pattern = pattern.replace("%", "!%")
+-        pattern = pattern.replace("_", "!_")
+-    return (pattern, esc)
+-
+-def _sql_esc_glob(patterns):
+-    """ Converts patterns to SQL LIKE format, if required (or gives up if
+-        not possible). """
+-    ret = []
+-    for pattern in patterns:
+-        if '[' in pattern: # LIKE only has % and _, so [abc] can't be done.
+-            return []      # So Load everything
+-
+-        # Convert to SQL LIKE format
+-        (pattern, esc) = _sql_esc(pattern)
+-        pattern = pattern.replace("*", "%")
+-        pattern = pattern.replace("?", "_")
+-        ret.append((pattern, esc))
+-    return ret
+ 
+ def _setupHistorySearchSQL(patterns=None, ignore_case=False):
+     """Setup need_full and patterns for _yieldSQLDataList, also see if
+@@ -104,7 +79,7 @@ def _setupHistorySearchSQL(patterns=None, ignore_case=False):
+     if len(patterns) > pat_max:
+         patterns = []
+     if ignore_case:
+-        patterns = _sql_esc_glob(patterns)
++        patterns = sql_esc_glob(patterns)
+     else:
+         tmp = []
+         need_glob = False
+diff --git a/yum/pkgtag_db.py b/yum/pkgtag_db.py
+index eddf175..e72fd05 100644
+--- a/yum/pkgtag_db.py
++++ b/yum/pkgtag_db.py
+@@ -18,7 +18,7 @@
+ # parse sqlite tag database
+ # return pkgnames and tag that was matched
+ import sqlite3 as sqlite
+-from sqlutils import executeSQL
++from sqlutils import executeSQL, sql_esc, sql_esc_glob
+ from Errors import PkgTagsError
+ import sqlutils
+ import sys
+@@ -68,8 +68,9 @@ class PackageTagDB(object):
+         """Search by tag name/glob
+            Return dict of dict[packagename] = [stringmatched, stringmatched, ...]"""
+         res = {}
+-        tag = '%%%s%%' % tag
+-        query = "SELECT name, tag, score FROM packagetags where tag like ?"
++        (tag, esc) = sql_esc(tag)
++        query = "SELECT name, tag, score FROM packagetags where tag like ? %s" % esc
++        tag = '%' + tag + '%' 
+         rows = self._sql_exec(query, (tag,))
+         for (name, tag, score) in rows:
+             if name not in res:
+@@ -82,8 +83,9 @@ class PackageTagDB(object):
+         """Search by package name/glob.
+            Return dict of dict[packagename] = [tag1, tag2, tag3, tag4, ...]"""
+         res = {}
+-        name = '%%%s%%' % name
+-        query = "SELECT name, tag, score FROM packagetags where name like ?"
++        (name, esc) = sql_esc(tag)
++        query = "SELECT name, tag, score FROM packagetags where name like ?%s " % esc
++        name = '%' + name + '%' 
+         rows = self._sql_exec(query, (name,))
+         for (name, tag, score) in rows:
+             if name not in res:
+diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
+index bf0cea9..33c088c 100644
+--- a/yum/sqlitesack.py
++++ b/yum/sqlitesack.py
+@@ -28,7 +28,7 @@ from packages import PackageObject, RpmBase, YumAvailablePackage, parsePackages
+ import Errors
+ import misc
+ 
+-from sqlutils import executeSQL
++from sqlutils import executeSQL, sql_esc, sql_esc_glob
+ import rpmUtils.miscutils
+ import sqlutils
+ import constants
+@@ -812,32 +812,6 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
+             pkgs.append(pkg)
+         return pkgs
+ 
+-    @staticmethod
+-    def _sql_esc(pattern):
+-        """ Apply SQLite escaping, if needed. Returns pattern and esc. """
+-        esc = ''
+-        if "_" in pattern or "%" in pattern:
+-            esc = ' ESCAPE "!"'
+-            pattern = pattern.replace("!", "!!")
+-            pattern = pattern.replace("%", "!%")
+-            pattern = pattern.replace("_", "!_")
+-        return (pattern, esc)
+-
+-    def _sql_esc_glob(self, patterns):
+-        """ Converts patterns to SQL LIKE format, if required (or gives up if
+-            not possible). """
+-        ret = []
+-        for pattern in patterns:
+-            if '[' in pattern: # LIKE only has % and _, so [abc] can't be done.
+-                return []      # So Load everything
+-
+-            # Convert to SQL LIKE format
+-            (pattern, esc) = self._sql_esc(pattern)
+-            pattern = pattern.replace("*", "%")
+-            pattern = pattern.replace("?", "_")
+-            ret.append((pattern, esc))
+-        return ret
+-
+     def _skip_all(self):
+         """ Are we going to skip every package in all our repos? """
+         skip_all = True
+@@ -917,12 +891,12 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
+         sql_params = []
+         dirname_check = ""
+         if not glob:
+-            (pattern, esc) = self._sql_esc(filename)
++            (pattern, esc) = sql_esc(filename)
+             dirname_check = "dirname = ? and filenames LIKE ? %s and " % esc
+             sql_params.append(dirname)
+             sql_params.append('%' + pattern + '%')
+         elif not file_glob:
+-            (pattern, esc) = self._sql_esc(filename)
++            (pattern, esc) = sql_esc(filename)
+             dirname_check = "dirname GLOB ? and filenames LIKE ? %s and " % esc
+             sql_params.append(dirname)
+             sql_params.append('%' + pattern + '%')
+@@ -996,7 +970,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
+             return result
+         
+         searchstring = searchstring.replace("'", "''")
+-        (searchstring, esc) = self._sql_esc(searchstring)
++        (searchstring, esc) = sql_esc(searchstring)
+         sql = "select DISTINCT pkgKey from packages where %s like '%%%s%%'%s " % (fields[0], searchstring, esc)
+         
+         for f in fields[1:]:
+@@ -1042,7 +1016,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
+         
[...33871 lines suppressed...]
++        fo.write("%u\n" % len(pkg_checksum_tups))
++        for pkgtup, TD in sorted(pkg_checksum_tups):
++            for var in pkgtup:
++                fo.write("%s\n" % var)
++            for var in TD:
++                fo.write("%s\n" % var)
++        fo.close()
++        os.rename(self._cachedir + '/yumdb-package-checksums.tmp',
++                  self._cachedir + '/yumdb-package-checksums')
++
+     def _get_cached_simpleVersion_main(self):
+         """ Return the cached string of the main rpmdbv. """
+         if self._have_cached_rpmdbv_data is not None:
+diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
+index 30a2625..e7b60de 100644
+--- a/yum/transactioninfo.py
++++ b/yum/transactioninfo.py
+@@ -577,12 +577,15 @@ class TransactionData:
+                 _reinstalled_pkgtups[txmbr.po.pkgtup] = txmbr.po
+             pkgs.append(txmbr.po)
+ 
++        self.rpmdb.preloadPackageChecksums()
+         main = PackageSackVersion()
++        pkg_checksum_tups = []
+         for pkg in sorted(pkgs):
+             if pkg.repoid != 'installed':
+                 # Paste from PackageSackBase.simpleVersion()
+                 csum = pkg.returnIdSum()
+                 main.update(pkg, csum)
++                pkg_checksum_tups.append((pkg.pkgtup, csum))
+                 continue
  
-         # If it is a filename, search the files.xml file info
--        results.extend(self.searchFiles(name))
-+        results.extend(self.searchFiles(n))
-         return misc.unique(results)
+             # Installed pkg, see if it's about to die
+@@ -597,7 +600,11 @@ class TransactionData:
+             csum = None
+             if 'checksum_type' in ydbi and 'checksum_data' in ydbi:
+                 csum = (ydbi.checksum_type, ydbi.checksum_data)
++                pkg_checksum_tups.append((pkg.pkgtup, csum))
+             main.update(pkg, csum)
++
++        self.rpmdb.transactionCachePackageChecksums(pkg_checksum_tups)
++
+         return main
+ 
+ class ConditionalTransactionData(TransactionData):
+-- 
+1.6.6
+
+
+From 77a77ec13bdbb80dbaefef9f05baabedddb9bcc1 Mon Sep 17 00:00:00 2001
+From: James Antill <james at and.org>
+Date: Tue, 23 Feb 2010 13:50:25 -0500
+Subject: [PATCH 27/29] Do process obsoletes for newest packages only.
+
+---
+ yum/__init__.py |    6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+diff --git a/yum/__init__.py b/yum/__init__.py
+index 324a8ec..f21001d 100644
+--- a/yum/__init__.py
++++ b/yum/__init__.py
+@@ -624,7 +624,11 @@ class YumBase(depsolve.Depsolve):
          
+         if self.conf.obsoletes:
+             obs_init = time.time()    
+-            self._up.rawobsoletes = self.pkgSack.returnObsoletes()
++            #  Note: newest=True here is semi-required for repos. with multiple
++            # versions. The problem is that if pkgA-2 _accidentally_ obsoletes
++            # pkgB-1, and we keep all versions, we want to release a pkgA-3
++            # that doesn't do the obsoletes ... and thus. not obsolete pkgB-1.
++            self._up.rawobsoletes = self.pkgSack.returnObsoletes(newest=True)
+             self.verbose_logger.debug('up:Obs Init time: %0.3f' % (time.time() - obs_init))
+ 
+         self._up.myarch = self.arch.canonarch
+-- 
+1.6.6
+
+
+From ba5266876fd7d3749afcb0a25c9a0da0c60e1808 Mon Sep 17 00:00:00 2001
+From: James Antill <james at and.org>
+Date: Tue, 23 Feb 2010 13:52:06 -0500
+Subject: [PATCH 28/29] Much faster limiting obsoletes to the newest versions of packages
+
+---
+ yum/packageSack.py |   26 ++++++++++++--------------
+ 1 files changed, 12 insertions(+), 14 deletions(-)
+
+diff --git a/yum/packageSack.py b/yum/packageSack.py
+index 0d9301b..1278cba 100644
+--- a/yum/packageSack.py
++++ b/yum/packageSack.py
+@@ -432,22 +432,20 @@ class MetaSack(PackageSackBase):
+         if not newest:
+             return self._computeAggregateDictResult("returnObsoletes")
          
-@@ -1516,7 +1513,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
-         if len(patterns) > pat_max:
-             patterns = []
-         if ignore_case:
--            patterns = self._sql_esc_glob(patterns)
-+            patterns = sql_esc_glob(patterns)
-         else:
-             tmp = []
-             need_glob = False
-diff --git a/yum/sqlutils.py b/yum/sqlutils.py
-index 4326910..4d7e36e 100644
---- a/yum/sqlutils.py
-+++ b/yum/sqlutils.py
-@@ -173,3 +173,27 @@ else:
-     executeSQL = executeSQLPyFormat
+-        # FIXME - this is slooooooooooooooooooooooooooooooow
+-        # get the dict back
+         obsdict = self._computeAggregateDictResult("returnObsoletes")
  
+-        newest_tups = set((pkg.pkgtup for pkg in self.returnNewestByName()))
+-        
+-        # go through each of the keys of the obs dict and see if it is in the
+-        # sack of newest pkgs - if it is not - remove the entry
+-        togo = []
+-        for obstup in obsdict:
+-            if obstup not in newest_tups:
+-                togo.append(obstup)
+-        for obstup in togo:
+-            del obsdict[obstup]
+-        
+-        return obsdict
++        names = set((obstup[0] for obstup in obsdict))
++        nobsdict = {}
++        last_name = ''
++        last_pkg = None
++        for pkg in reversed(sorted(self.searchNames(names))):
++            if last_name == pkg.name and not pkg.verEQ(last_pkg):
++                continue
++            last_name = pkg.name
++            last_pkg = pkg
++            if pkg.pkgtup in obsdict:
++                nobsdict[pkg.pkgtup] = obsdict[pkg.pkgtup]
++        return nobsdict
+         
+     def searchFiles(self, name):
+         """return list of packages by filename"""
+-- 
+1.6.6
+
+
+From 51e8b52493be16cc3b7620bd47a225ada6601327 Mon Sep 17 00:00:00 2001
+From: James Antill <james at and.org>
+Date: Tue, 23 Feb 2010 13:53:31 -0500
+Subject: [PATCH 29/29] Allow pkgtag_db to be loaded on RHEL-5, should work too
+
+---
+ yum/pkgtag_db.py |    3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+diff --git a/yum/pkgtag_db.py b/yum/pkgtag_db.py
+index e72fd05..d2836e4 100644
+--- a/yum/pkgtag_db.py
++++ b/yum/pkgtag_db.py
+@@ -17,8 +17,7 @@
  
-+def sql_esc(pattern):
-+    """ Apply SQLite escaping, if needed. Returns pattern and esc. """
-+    esc = ''
-+    if "_" in pattern or "%" in pattern:
-+        esc = ' ESCAPE "!"'
-+        pattern = pattern.replace("!", "!!")
-+        pattern = pattern.replace("%", "!%")
-+        pattern = pattern.replace("_", "!_")
-+    return (pattern, esc)
-+
-+def sql_esc_glob(patterns):
-+    """ Converts patterns to SQL LIKE format, if required (or gives up if
-+        not possible). """
-+    ret = []
-+    for pattern in patterns:
-+        if '[' in pattern: # LIKE only has % and _, so [abc] can't be done.
-+            return []      # So Load everything
-+
-+        # Convert to SQL LIKE format
-+        (pattern, esc) = sql_esc(pattern)
-+        pattern = pattern.replace("*", "%")
-+        pattern = pattern.replace("?", "_")
-+        ret.append((pattern, esc))
-+    return ret
+ # parse sqlite tag database
+ # return pkgnames and tag that was matched
+-import sqlite3 as sqlite
+-from sqlutils import executeSQL, sql_esc, sql_esc_glob
++from sqlutils import sqlite, executeSQL, sql_esc, sql_esc_glob
+ from Errors import PkgTagsError
+ import sqlutils
+ import sys
+-- 
+1.6.6
+


Index: yum.spec
===================================================================
RCS file: /cvs/pkgs/rpms/yum/devel/yum.spec,v
retrieving revision 1.300
retrieving revision 1.301
diff -u -p -r1.300 -r1.301
--- yum.spec	18 Feb 2010 04:05:28 -0000	1.300
+++ yum.spec	26 Feb 2010 04:25:15 -0000	1.301
@@ -3,7 +3,7 @@
 Summary: RPM installer/updater
 Name: yum
 Version: 3.2.26
-Release: 4%{?dist}
+Release: 5%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 Source0: http://yum.baseurl.org/download/3.2/%{name}-%{version}.tar.gz
@@ -110,10 +110,12 @@ rm -rf $RPM_BUILD_ROOT
 %dir /usr/lib/yum-plugins
 
 %changelog
+* Thu Feb 24 2010 James Antill <james at fedoraproject.org> - 3.2.26-5
+- new HEAD, minor features and speed.
+
 * Wed Feb 17 2010 Seth Vidal <skvidal at fedoraproject.org> - 3.2.26-4
 - new HEAD to fix the fix to the fix
 
-
 * Tue Feb 16 2010 Seth Vidal <skvidal at fedoraproject.org> - 3.2.26-3
 - latest head - including fixes to searchPrcos
 



More information about the scm-commits mailing list