[Yum-devel] [PATCH 1/2] Change tsInfo.setDatabases() so we don't have to setup the pkgSack.
James Antill
james at and.org
Tue Feb 21 18:43:21 UTC 2012
---
yum/__init__.py | 4 ++--
yum/depsolve.py | 7 +++++--
yum/transactioninfo.py | 24 ++++++++++++++++++++----
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/yum/__init__.py b/yum/__init__.py
index 9e18874..f03d65a 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1126,7 +1126,7 @@ class YumBase(depsolve.Depsolve):
# If transaction was changed by postresolve plugins then we should run skipbroken again
(rescode, restring) = self._doSkipBroken(rescode, restring, clear_skipped=False )
- if self.tsInfo.pkgSack is not None: # rm Transactions don't have pkgSack
+ if self.tsInfo._pkgSack is not None: # Transactions have pkgSack?
self.tsInfo.pkgSack.dropCachedData()
# FIXME: This is horrible, see below and yummain. Maybe create a real
@@ -5952,7 +5952,7 @@ class YumBase(depsolve.Depsolve):
msg = "%s\n" % self.rpmdb.simpleVersion(main_only=True)[0]
msg += "%s\n" % self.ts.getTsFlags()
- if self.tsInfo.pkgSack is None: # rm Transactions don't have pkgSack
+ if self.tsInfo._pkgSack is None: # Transactions have pkgSack?
msg += "0\n"
else:
msg += "%s\n" % len(self.repos.listEnabled())
diff --git a/yum/depsolve.py b/yum/depsolve.py
index a8f9acb..d74e22b 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -110,9 +110,12 @@ class Depsolve(object):
self._tsInfo = self._transactionDataFactory()
if remove_only:
pkgSack = None
+ pkgSackCtor = None
else:
- pkgSack = self.pkgSack
- self._tsInfo.setDatabases(self.rpmdb, pkgSack)
+ # Don't instant setup, or things like localinstall are screwed.
+ pkgSack = None
+ pkgSackCtor = self._getSacks
+ self._tsInfo.setDatabases(self.rpmdb, pkgSack, pkgSackCtor)
self._tsInfo.installonlypkgs = self.conf.installonlypkgs # this kinda sucks
# this REALLY sucks, sadly (needed for group conditionals)
self._tsInfo.install_method = self.install
diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index 4d89d83..97de8f0 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -87,7 +87,8 @@ class TransactionData:
self.conditionals = {} # key = pkgname, val = list of pos to add
self.rpmdb = None
- self.pkgSack = None
+ self._pkgSack = None
+ self._pkgSackCtor = None
self.pkgSackPackages = 0
self.localSack = PackageSack()
self._inSack = GetProvReqOnlyPackageSack()
@@ -115,6 +116,18 @@ class TransactionData:
else:
return iter(self.getMembers())
+ def _getPkgSack(self):
+ if self._pkgSack is not None:
+ return self._pkgSack
+ if self._pkgSackCtor is not None:
+ self._pkgSack = self._pkgSackCtor()
+ return self._pkgSack
+
+ pkgSack = property(fget=lambda self: self._getPkgSack(),
+ fset=lambda self, value: setattr(self, "_pkgSack",value),
+ fdel=lambda self: setattr(self, "_pkgSack", None),
+ doc="Package sack object")
+
def debugprint(self, msg):
if self.debug:
print msg
@@ -208,7 +221,9 @@ class TransactionData:
txmbrs = self.matchNaevr(na[0], na[1])
if not txmbrs:
- if self.pkgSack is None:
+ if self._inSack is not None:
+ pkgs = self._inSack.returnPackages(patterns=[pattern])
+ elif self.pkgSack is None:
pkgs = []
else:
pkgs = self.pkgSack.returnPackages(patterns=[pattern])
@@ -547,9 +562,10 @@ class TransactionData:
return txmbr
- def setDatabases(self, rpmdb, pkgSack):
+ def setDatabases(self, rpmdb, pkgSack, pkgSackCtor=None):
self.rpmdb = rpmdb
- self.pkgSack = pkgSack
+ self._pkgSack = pkgSack
+ self._pkgSackCtor = pkgSackCtor
def getNewProvides(self, name, flag=None, version=(None, None, None)):
"""return dict { packages -> list of matching provides }
--
1.7.6.5
More information about the Yum-devel
mailing list