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