[yum-commits] Branch 'yum-3_2_X' - 5 commits - rpmUtils/transaction.py yumcommands.py yum/rpmsack.py
Panu Matilainen
pmatilai at osuosl.org
Tue Feb 15 15:23:24 UTC 2011
rpmUtils/transaction.py | 14 +++++-
yum/rpmsack.py | 111 ++++++++++--------------------------------------
yumcommands.py | 2
3 files changed, 38 insertions(+), 89 deletions(-)
New commits:
commit c011c150e43e536c1650a8260e55ec7e952694a7
Author: Panu Matilainen <pmatilai at laiskiainen.org>
Date: Tue Feb 15 11:22:44 2011 +0200
Unbreak checkGPGKey()
repo.gpgkey is a list, not a string, since at least 2005
diff --git a/yumcommands.py b/yumcommands.py
index 45cd209..f196477 100644
--- a/yumcommands.py
+++ b/yumcommands.py
@@ -46,7 +46,7 @@ def checkRootUID(base):
def checkGPGKey(base):
if not base.gpgKeyCheck():
for repo in base.repos.listEnabled():
- if (repo.gpgcheck or repo.repo_gpgcheck) and repo.gpgkey == '':
+ if (repo.gpgcheck or repo.repo_gpgcheck) and not repo.gpgkey:
msg = _("""
You have enabled checking of packages via GPG keys. This is a good thing.
However, you do not have any GPG public keys installed. You need to download
commit d3b95e48a2b2c5edaccce3e9184c7122dd11af93
Author: Panu Matilainen <pmatilai at laiskiainen.org>
Date: Tue Feb 15 09:47:34 2011 +0200
Use _get_packages() instead of ts.dbMatch() in rpmsack where possible
Deal with gpg-pubkey filtering and auto_close centrally,
eliminating the possibility of accidentally leaving zombie rpmdb
iterators behind and also reducing code duplication.
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 24e1d5d..227ed89 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -378,54 +378,36 @@ class RPMDBPackageSack(PackageSackBase):
pass
def searchAll(self, name, query_type='like'):
- ts = self.readOnlyTS()
result = {}
# check provides
tag = self.DEP_TABLE['provides'][0]
- mi = ts.dbMatch()
- mi.pattern(tag, rpm.RPMMIRE_GLOB, name)
- for hdr in mi:
- if hdr['name'] == 'gpg-pubkey':
- continue
- pkg = self._makePackageObject(hdr, mi.instance())
+ mi = self._get_packages(patterns=[(tag, rpm.RPMMIRE_GLOB, name)])
+ for hdr, idx in mi:
+ pkg = self._makePackageObject(hdr, idx)
result.setdefault(pkg.pkgid, pkg)
- del mi
fileresults = self.searchFiles(name)
for pkg in fileresults:
result.setdefault(pkg.pkgid, pkg)
- if self.auto_close:
- self.ts.close()
-
return result.values()
def searchFiles(self, name):
"""search the filelists in the rpms for anything matching name"""
- ts = self.readOnlyTS()
result = {}
name = os.path.normpath(name)
- mi = ts.dbMatch('basenames', name)
# Note that globs can't be done. As of 4.8.1:
# mi.pattern('basenames', rpm.RPMMIRE_GLOB, name)
# ...produces no results.
- for hdr in mi:
- if hdr['name'] == 'gpg-pubkey':
- continue
- pkg = self._makePackageObject(hdr, mi.instance())
+ for hdr, idx in self._get_packages('basenames', name):
+ pkg = self._makePackageObject(hdr, idx)
result.setdefault(pkg.pkgid, pkg)
- del mi
-
- result = result.values()
- if self.auto_close:
- self.ts.close()
-
- return result
+ return result.values()
def searchPrco(self, name, prcotype):
@@ -438,21 +420,15 @@ class RPMDBPackageSack(PackageSackBase):
if misc.re_glob(n):
glob = True
- ts = self.readOnlyTS()
result = {}
tag = self.DEP_TABLE[prcotype][0]
- mi = ts.dbMatch(tag, misc.to_utf8(n))
- for hdr in mi:
- if hdr['name'] == 'gpg-pubkey':
- continue
- po = self._makePackageObject(hdr, mi.instance())
+ for hdr, idx in self._get_packages(tag, misc.to_utf8(n)):
+ po = self._makePackageObject(hdr, idx)
if not glob:
if po.checkPrco(prcotype, (n, f, (e,v,r))):
result[po.pkgid] = po
else:
result[po.pkgid] = po
- del mi
-
# If it's not a provides or filename, we are done
if prcotype == 'provides' and name[0] == '/':
@@ -463,9 +439,6 @@ class RPMDBPackageSack(PackageSackBase):
result = result.values()
self._cache[prcotype][name] = result
- if self.auto_close:
- self.ts.close()
-
return result
def searchProvides(self, name):
@@ -636,18 +609,13 @@ class RPMDBPackageSack(PackageSackBase):
if self._cached_conflicts_data is None:
result = {}
- ts = self.readOnlyTS()
- mi = ts.dbMatch('conflictname')
-
- for hdr in mi:
- if hdr['name'] == 'gpg-pubkey': # Just in case...
- continue
+ for hdr, idx in self._get_packages('conflictname'):
if not hdr[rpm.RPMTAG_CONFLICTNAME]:
# Pre. rpm-4.9.x the above dbMatch() does nothing.
continue
- po = self._makePackageObject(hdr, mi.instance())
+ po = self._makePackageObject(hdr, idx)
result[po.pkgid] = po
if po._has_hdr:
continue # Unlikely, but, meh...
@@ -659,9 +627,6 @@ class RPMDBPackageSack(PackageSackBase):
del po.hdr
self._cached_conflicts_data = result.values()
- if self.auto_close:
- self.ts.close()
-
return self._cached_conflicts_data
def _write_conflicts_new(self, pkgs, rpmdbv):
@@ -1233,18 +1198,16 @@ class RPMDBPackageSack(PackageSackBase):
ts = self.readOnlyTS()
if name is not None:
- mi = ts.dbMatch('name', name)
+ mi = self._get_packages('name', name)
elif arch is not None:
- mi = ts.dbMatch('arch', arch)
+ mi = self._get_packages('arch', arch)
else:
- mi = ts.dbMatch()
+ mi = self._get_packages()
self._completely_loaded = True
done = False
- for hdr in mi:
- if hdr['name'] == 'gpg-pubkey':
- continue
- po = self._makePackageObject(hdr, mi.instance())
+ for hdr, idx in mi:
+ po = self._makePackageObject(hdr, idx)
# We create POs out of all matching names, even if we don't return
# them.
self._pkgnames_loaded.add(po.name)
@@ -1256,9 +1219,6 @@ class RPMDBPackageSack(PackageSackBase):
else:
ret.append(po)
- if self.auto_close:
- self.ts.close()
-
if not done and name is not None:
self._pkgname_fails.add(name)
commit 348a3ac46f79870ae5dc14305c9f85c9b4bff66e
Author: Panu Matilainen <pmatilai at laiskiainen.org>
Date: Tue Feb 15 09:39:19 2011 +0200
Eliminate long dead _header_from_index() internal helper
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 4e7f378..24e1d5d 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -1204,28 +1204,6 @@ class RPMDBPackageSack(PackageSackBase):
if self.auto_close:
self.ts.close()
- def _header_from_index(self, idx):
- """returns a package header having been given an index"""
- warnings.warn('_header_from_index() will go away in a future version of Yum.\n',
- Errors.YumFutureDeprecationWarning, stacklevel=2)
-
- ts = self.readOnlyTS()
- try:
- mi = ts.dbMatch(0, idx)
- except (TypeError, StopIteration), e:
- #FIXME: raise some kind of error here
- print 'No index matching %s found in rpmdb, this is bad' % idx
- yield None # it should REALLY not be returning none - this needs to be right
- else:
- hdr = mi.next()
- yield hdr
- del hdr
-
- del mi
- if self.auto_close:
- self.ts.close()
-
-
def _search(self, name=None, epoch=None, ver=None, rel=None, arch=None):
'''List of matching packages, to zero or more of NEVRA.'''
if name is not None and name in self._pkgname_fails:
commit 7df735c3182afafe644c89809cdcc446cbe5d0e2
Author: Panu Matilainen <pmatilai at laiskiainen.org>
Date: Tue Feb 15 09:33:41 2011 +0200
Generalize rpmsack _all_packages() helper to accept dbMatch arguments
Rename to _get_packages() and accept arguments to be passed to
dbMatch(), adjust callers.
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 0982a7c..4e7f378 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -234,7 +234,7 @@ class RPMDBPackageSack(PackageSackBase):
self._simple_pkgtup_list = csumpkgtups.keys()
if not self._simple_pkgtup_list:
- for (hdr, mi) in self._all_packages():
+ for (hdr, mi) in self._get_packages():
self._simple_pkgtup_list.append(self._hdr2pkgTuple(hdr))
return self._simple_pkgtup_list
@@ -607,7 +607,7 @@ class RPMDBPackageSack(PackageSackBase):
if not self._completely_loaded:
rpats = self._compile_patterns(patterns, ignore_case)
- for hdr, idx in self._all_packages():
+ for hdr, idx in self._get_packages():
if self._match_repattern(rpats, hdr, ignore_case):
self._makePackageObject(hdr, idx)
self._completely_loaded = patterns is None
@@ -1168,7 +1168,7 @@ class RPMDBPackageSack(PackageSackBase):
if not lowered:
searchstrings = map(lambda x: x.lower(), searchstrings)
ret = []
- for hdr, idx in self._all_packages():
+ for hdr, idx in self._get_packages():
n = self._find_search_fields(fields, searchstrings, hdr)
if n > 0:
ret.append((self._makePackageObject(hdr, idx), n))
@@ -1190,16 +1190,17 @@ class RPMDBPackageSack(PackageSackBase):
return [ self._makePackageObject(h, mi) for (h, mi) in ts.returnLeafNodes(headers=True) ]
# Helper functions
- def _all_packages(self):
- '''Generator that yield (header, index) for all packages
+ def _get_packages(self, *args, **kwds):
+ '''dbMatch() wrapper generator that yields (header, index) for matches
'''
ts = self.readOnlyTS()
- mi = ts.dbMatch()
- for hdr in mi:
- if hdr['name'] != 'gpg-pubkey':
- yield (hdr, mi.instance())
+ mi = ts.dbMatch(*args, **kwds)
+ for h in mi:
+ if h['name'] != 'gpg-pubkey':
+ yield (h, mi.instance())
del mi
+
if self.auto_close:
self.ts.close()
@@ -1323,7 +1324,7 @@ class RPMDBPackageSack(PackageSackBase):
def getHdrList(self):
warnings.warn('getHdrList() will go away in a future version of Yum.\n',
DeprecationWarning, stacklevel=2)
- return [ hdr for hdr, idx in self._all_packages() ]
+ return [ hdr for hdr, idx in self._get_packages() ]
def getNameArchPkgList(self):
warnings.warn('getNameArchPkgList() will go away in a future version of Yum.\n',
commit fda20fca04cad0a85a6a4b1651d04bd8f9c1d6f5
Author: Panu Matilainen <pmatilai at laiskiainen.org>
Date: Tue Feb 15 08:46:36 2011 +0200
Support additional match patterns in a single call to ts.dbMatch()
Rpm-level dbmatch iterator requires additional mi.pattern() calls
for specifying extra match patterns. Hide this behind the ts wrapper,
dbMatch() now optionally takes extra patterns as list of
(tag, type, pattern) tuples.
diff --git a/rpmUtils/transaction.py b/rpmUtils/transaction.py
index 897c30f..c5167d3 100644
--- a/rpmUtils/transaction.py
+++ b/rpmUtils/transaction.py
@@ -23,8 +23,7 @@ ts = None
class TransactionWrapper:
def __init__(self, root='/'):
self.ts = rpm.TransactionSet(root)
- self._methods = ['dbMatch',
- 'order',
+ self._methods = ['order',
'addErase',
'addInstall',
'run',
@@ -61,6 +60,17 @@ class TransactionWrapper:
return results
+ def dbMatch(self, *args, **kwds):
+ if 'patterns' in kwds:
+ patterns = kwds.pop('patterns')
+ else:
+ patterns = []
+
+ mi = self.ts.dbMatch(*args, **kwds)
+ for (tag, tp, pat) in patterns:
+ mi.pattern(tag, tp, pat)
+ return mi
+
def __getattr__(self, attr):
if attr in self._methods:
return self.getMethod(attr)
More information about the Yum-commits
mailing list