[yum-git] Branch 'yum-3_2_X' - 2 commits - cli.py test/depsolvetests.py yumcommands.py yum/depsolve.py yum/__init__.py yum/rpmsack.py
James Antill
james at linux.duke.edu
Tue Sep 2 06:02:35 UTC 2008
cli.py | 12 ++++++++----
test/depsolvetests.py | 38 ++++++++++++++++++++++++++++++++++++++
yum/__init__.py | 4 ++--
yum/depsolve.py | 16 +++++++++++-----
yum/rpmsack.py | 6 +++---
yumcommands.py | 3 +++
6 files changed, 65 insertions(+), 14 deletions(-)
New commits:
commit 5577c1b55738fdbb9bb6a655ab5c40525e533436
Author: James Antill <james at and.org>
Date: Tue Sep 2 02:02:28 2008 -0400
Add some test cases, including weird behaviuor for inst_require_obsoletes
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 4a3dad5..87522eb 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -1114,3 +1114,41 @@ class DepsolveTests(DepsolveTests):
self.assertEquals('ok', *self.resolveCode())
self.assertResult((ipo1, po1))
+
+ def test_inst_require_conflict1(self):
+ ipo1 = FakePackage('foo')
+ ipo1.addRequires('bar', None, (None, None, None))
+ ipo1.addConflicts('bar', None, (None, None, None))
+ self.tsInfo.addInstall(ipo1)
+
+ po1 = FakePackage('bar')
+ self.xsack.addPackage(po1)
+
+ self.assertEquals('err', *self.resolveCode())
+
+ def test_inst_require_conflict_me1(self):
+ ipo1 = FakePackage('foo')
+ ipo1.addRequires('bar', None, (None, None, None))
+ self.tsInfo.addInstall(ipo1)
+
+ po1 = FakePackage('bar')
+ po1.addConflicts('foo', None, (None, None, None))
+ self.xsack.addPackage(po1)
+
+ self.assertEquals('err', *self.resolveCode())
+
+ def test_inst_require_obsoletes1(self):
+ ipo1 = FakePackage('foo')
+ ipo1.addRequires('bar', None, (None, None, None))
+ ipo1.addObsoletes('bar', None, (None, None, None))
+ self.tsInfo.addInstall(ipo1)
+
+ po1 = FakePackage('bar')
+ self.xsack.addPackage(po1)
+
+ # FIXME: Does it make sense to ignore the obsoletes here? esp. as we
+ # don't ignore the conflicts above? ... I'm guessing ignoring it is
+ # by accident too? bah.
+ # self.assertEquals('err', *self.resolveCode())
+ self.assertEquals('ok', *self.resolveCode())
+ self.assertResult((ipo1, po1))
commit dce0e17d173a57ea20190250c13f09fa072c917f
Author: James Antill <james at and.org>
Date: Tue Sep 2 01:07:25 2008 -0400
Allow yum to create "remove only" transactions, use it for rm cmd: bug 240821
diff --git a/cli.py b/cli.py
index e244d2f..cf0b186 100644
--- a/cli.py
+++ b/cli.py
@@ -327,12 +327,16 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
# setup our transaction set if the command we're using needs it
# compat with odd modules not subclassing YumCommand
needTs = True
- if hasattr(self.yum_cli_commands[self.basecmd], 'needTs'):
- needTs = self.yum_cli_commands[self.basecmd].needTs(self, self.basecmd, self.extcmds)
+ needTsRemove = False
+ cmd = self.yum_cli_commands[self.basecmd]
+ if hasattr(cmd, 'needTs'):
+ needTs = cmd.needTs(self, self.basecmd, self.extcmds)
+ if not needTs and hasattr(cmd, 'needTsRemove'):
+ needTsRemove = cmd.needTsRemove(self, self.basecmd, self.extcmds)
- if needTs:
+ if needTs or needTsRemove:
try:
- self._getTs()
+ self._getTs(needTsRemove)
except yum.Errors.YumBaseError, e:
return 1, [str(e)]
diff --git a/yum/__init__.py b/yum/__init__.py
index 4fa47eb..6fdb59d 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -644,8 +644,8 @@ class YumBase(depsolve.Depsolve):
if self.tsInfo.changed:
(rescode, restring) = self.resolveDeps()
- self.tsInfo.pkgSack.dropCachedData()
- self.pkgSack.dropCachedData()
+ if self.tsInfo.pkgSack is not None: # rm Transactions don't have pkgSack
+ self.tsInfo.pkgSack.dropCachedData()
self.rpmdb.dropCachedData()
# We _must_ get rid of all the used tses before we go on, so that C-c
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 0cad1ab..25eb0e6 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -85,7 +85,7 @@ class Depsolve(object):
Errors.YumFutureDeprecationWarning, stacklevel=2)
return self._getTs()
- def _getTs(self):
+ def _getTs(self, remove_only=False):
"""setup all the transaction set storage items we'll need
This can't happen in __init__ b/c we don't know our installroot
yet"""
@@ -96,15 +96,21 @@ class Depsolve(object):
if not self.conf.installroot:
raise Errors.YumBaseError, _('Setting up TransactionSets before config class is up')
- self._getTsInfo()
+ self._getTsInfo(remove_only)
self.initActionTs()
- def _getTsInfo(self):
+ def _getTsInfo(self, remove_only=False):
+ """ remove_only param. says if we are going to do _only_ remove(s) in
+ the transaction. If so we don't need to setup the remote repos. """
if self._tsInfo is None:
self._tsInfo = self._transactionDataFactory()
- self._tsInfo.setDatabases(self.rpmdb, self.pkgSack)
+ if remove_only:
+ pkgSack = None
+ else:
+ pkgSack = self.pkgSack
+ self._tsInfo.setDatabases(self.rpmdb, pkgSack)
self._tsInfo.installonlypkgs = self.conf.installonlypkgs # this kinda sucks
- # this REALLY sucks, sadly
+ # this REALLY sucks, sadly (needed for group conditionals)
self._tsInfo.install_method = self.install
self._tsInfo.update_method = self.update
self._tsInfo.remove_method = self.remove
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index af34204..b04d2ae 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -60,9 +60,9 @@ class RPMInstalledPackage(YumInstalledPackage):
def __getattr__(self, varname):
self.hdr = val = self._get_hdr()
self._has_hdr = True
- if varname != 'hdr': # This is very unusual, for anything it does
- val = val[varname] # happen for it might be worth adding at __init_
-
+ if varname != 'hdr': # This is unusual, for anything that happens
+ val = val[varname] # a lot we should preload at __init__.
+ # Also note that pkg.no_value raises KeyError.
return val
diff --git a/yumcommands.py b/yumcommands.py
index 3eaf0de..903456e 100644
--- a/yumcommands.py
+++ b/yumcommands.py
@@ -284,6 +284,9 @@ class EraseCommand(YumCommand):
def needTs(self, base, basecmd, extcmds):
return False
+ def needTsRemove(self, base, basecmd, extcmds):
+ return True
+
class GroupCommand(YumCommand):
def doCommand(self, base, basecmd, extcmds):
base.verbose_logger.log(logginglevels.INFO_2,
More information about the Yum-cvs-commits
mailing list