[yum-git] Branch 'yum-3_2_X' - 6 commits - yum/depsolve.py yum/misc.py yum/yumRepo.py
James Antill
james at linux.duke.edu
Tue Jul 22 17:19:40 UTC 2008
yum/depsolve.py | 27 +++++++++++++++++++++++++--
yum/misc.py | 13 ++++++++++---
yum/yumRepo.py | 17 ++++++++++++-----
3 files changed, 47 insertions(+), 10 deletions(-)
New commits:
commit 8042b26a6261dbd3937d6d00161d189f58023890
Merge: c186791... 3646e64...
Author: James Antill <james at and.org>
Date: Tue Jul 22 13:15:30 2008 -0400
Merge branch 'yum-3_2_X' of ssh://login.linux.duke.edu/home/groups/yum/git/yum into yum-3_2_X
* 'yum-3_2_X' of ssh://login.linux.duke.edu/home/groups/yum/git/yum:
add a __version_info__ tuple of ints derived from __version__
Add parameters to selectGroup()
new german translation updates from Fabian Affolter
silence the "No package matched to remove" lines during groupremove operations.
commit c1867919a7ced82c6b48dd1f2b71d209d76a7c0c
Merge: 80bb298... 6a344d1...
Author: James Antill <james at and.org>
Date: Tue Jul 22 13:15:03 2008 -0400
Merge branch 'repo-sacks' into yum-3_2_X
* repo-sacks:
Don't create sacks for repos that we don't care about
commit 80bb298618570c85a2ac72b37c9009ebf1af235e
Author: James Antill <james at and.org>
Date: Wed Jun 11 12:36:18 2008 -0400
Try and solve the 666 requires on a single package problem, the
kernel people want to try this for ABI stuff (each symbol is a provides).
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 2577cef..ee57915 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -396,7 +396,24 @@ class Depsolve(object):
return checkdeps, missingdep
+ def _quickWhatProvides(self, name, flags, version):
+ if self._last_req is None:
+ return False
+ if flags == 0:
+ flags = None
+ if type(version) in (types.StringType, types.NoneType, types.UnicodeType):
+ (r_e, r_v, r_r) = rpmUtils.miscutils.stringToVersion(version)
+ elif type(version) in (types.TupleType, types.ListType): # would this ever be a ListType?
+ (r_e, r_v, r_r) = version
+
+ # Quick lookup, lots of reqs for one pkg:
+ po = self._last_req
+ if po.checkPrco('provides', (name, flags, (r_e, r_v, r_r))):
+ self.verbose_logger.debug(_('Quick matched %s to require for %s'), po, name)
+ return True
+ return False
+
def _requiringFromTransaction(self, requiringPo, requirement, errorlist):
"""processes the dependency resolution for a dep where requiring
package is in the transaction set"""
@@ -427,8 +444,10 @@ class Depsolve(object):
# - if they are the same
# - be confused but continue
- provSack = self.whatProvides(needname, needflags, needversion)
+ if self._quickWhatProvides(needname, needflags, needversion):
+ return checkdeps, missingdep
+ provSack = self.whatProvides(needname, needflags, needversion)
# get rid of things that are already in the rpmdb - b/c it's pointless to use them here
for pkg in provSack.returnPackages():
@@ -483,8 +502,8 @@ class Depsolve(object):
_('%s already in ts, skipping this one'), pkg)
# FIXME: Remove this line, if it is not needed ?
# checkdeps = 1
+ self._last_req = pkg
return checkdeps, missingdep
-
# find the best one
@@ -496,6 +515,7 @@ class Depsolve(object):
for txmbr in results:
if pkg == txmbr.po:
checkdeps = True
+ self._last_req = pkg
return checkdeps, missingdep
# find out which arch of the ones we can choose from is closest
@@ -531,11 +551,13 @@ class Depsolve(object):
txmbr = self.tsInfo.addUpdate(best, inst[0])
txmbr.setAsDep(po=requiringPo)
txmbr.reason = "dep"
+ self._last_req = best
else:
self.verbose_logger.debug(_('TSINFO: Marking %s as install for %s'), best,
requiringPo)
txmbr = self.tsInfo.addInstall(best)
txmbr.setAsDep(po=requiringPo)
+ self._last_req = best
# if we had other packages with this name.arch that we found
# before, they're not going to be installed anymore, so we
@@ -627,6 +649,7 @@ class Depsolve(object):
self.po_with_problems = set()
self._working_po = None
+ self._last_req = None
self.tsInfo.resetResolved(hard=False)
CheckDeps = True
commit 6a344d1b1f99e0eb8789c087759feaa3f3f1c696
Merge: 7550b27... c50a61a...
Author: James Antill <james at and.org>
Date: Tue Jul 22 12:16:26 2008 -0400
Merge conflict
diff --cc yum/yumRepo.py
index 47ef8f1,b032b57..7723534
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@@ -251,21 -251,19 +251,26 @@@ class YumRepository(Repository, config.
# callback function for handling media
self.mediafunc = None
+ self._sack = None
+
+ self._grabfunc = None
+ self._grab = None
+
+ def _getSack(self):
+ # FIXME: Note that having the repo hold the sack, which holds "repos"
+ # is not only confusing but creates a circular dep.
+ # Atm. we don't leak memory because RepoStorage.close() is called,
+ # which calls repo.close() which calls sack.close() which removes the
+ # repos from the sack ... thus. breaking the cycle.
- self.sack = sqlitesack.YumSqlitePackageSack(
+ if self._sack is None:
+ self._sack = sqlitesack.YumSqlitePackageSack(
sqlitesack.YumAvailablePackageSqlite)
-
- self._grabfunc = None
- self._grab = None
+ return self._sack
+ sack = property(_getSack)
def close(self):
- self.sack.close()
+ if self._sack is not None:
+ self.sack.close()
Repository.close(self)
def _resetSack(self):
commit c50a61a50042eff0bc6cb9a323b2dbf0292a1ad8
Author: James Antill <james at and.org>
Date: Sun Jul 20 17:26:36 2008 -0400
Make 'import gpgme' less fatal ... it isn't required, yet
diff --git a/yum/misc.py b/yum/misc.py
index a587eb6..caae307 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -16,7 +16,10 @@ import pwd
import fnmatch
import bz2
from stat import *
-import gpgme
+try:
+ import gpgme
+except ImportError:
+ gpgme = None
from Errors import MiscError
@@ -322,6 +325,9 @@ def keyInstalled(ts, keyid, timestamp):
return -1
def import_key_to_pubring(rawkey, repo_cachedir):
+ if gpgme is None:
+ return False
+
gpgdir = '%s/gpgdir' % repo_cachedir
if not os.path.exists(gpgdir):
os.makedirs(gpgdir)
@@ -334,12 +340,13 @@ def import_key_to_pubring(rawkey, repo_cachedir):
fp.close()
ctx.import_(key_fo)
key_fo.close()
+ return True
def return_keyids_from_pubring(gpgdir):
- ctx = gpgme.Context()
- if not os.path.exists(gpgdir):
+ if gpgme is None or not os.path.exists(gpgdir):
return []
+ ctx = gpgme.Context()
os.environ['GNUPGHOME'] = gpgdir
keyids = []
for k in ctx.keylist():
commit 7550b27dcd446f058ea5d8108a0b0b329f1340a5
Author: James Antill <james at and.org>
Date: Wed Mar 26 14:21:09 2008 -0400
Don't create sacks for repos that we don't care about
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
index 0585f99..47ef8f1 100644
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@ -251,14 +251,21 @@ class YumRepository(Repository, config.RepoConf):
# callback function for handling media
self.mediafunc = None
- self.sack = sqlitesack.YumSqlitePackageSack(
- sqlitesack.YumAvailablePackageSqlite)
+ self._sack = None
self._grabfunc = None
self._grab = None
+ def _getSack(self):
+ if self._sack is None:
+ self._sack = sqlitesack.YumSqlitePackageSack(
+ sqlitesack.YumAvailablePackageSqlite)
+ return self._sack
+ sack = property(_getSack)
+
def close(self):
- self.sack.close()
+ if self._sack is not None:
+ self.sack.close()
Repository.close(self)
def _resetSack(self):
More information about the Yum-cvs-commits
mailing list