[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