[yum-commits] Branch 'yum-3_2_X' - 4 commits - cli.py docs/repomd.dtd test/simpleremovetests.py test/simpleupdatetests.py test/testbase.py yum/__init__.py

James Antill james at osuosl.org
Sat Oct 9 12:17:21 UTC 2010


 cli.py                    |   12 +++++---
 docs/repomd.dtd           |   53 ++++++++++++++++++++++++++++++++++++++
 test/simpleremovetests.py |   63 ++++++++++++++++++++++++++++++++++++++++++++++
 test/simpleupdatetests.py |   62 +++++++++++++++++++++++++++++++++++++++++++++
 test/testbase.py          |   17 +++++++++---
 yum/__init__.py           |   10 +++++--
 6 files changed, 206 insertions(+), 11 deletions(-)

New commits:
commit d56cddd9b19a66a14517af83b188a72f383e9f18
Author: James Antill <james at and.org>
Date:   Fri Oct 8 17:07:29 2010 -0400

    Might as well add this to the repo. at least.

diff --git a/docs/repomd.dtd b/docs/repomd.dtd
new file mode 100644
index 0000000..643eff1
--- /dev/null
+++ b/docs/repomd.dtd
@@ -0,0 +1,53 @@
+<!--
+    This is DTD for repomd.xml files used by yum.
+
+	Author:
+		Miroslav Suchý <msuchy at redhat.com>
+
+	Date: 2010-01-29
+
+    The FPI for repomd.xml DTD is:
+		"-//Red Hat//repomd.xml DTD 1.0//EN"
+
+	Typical usage:
+	<?xml version="1.0" encoding="UTF-8"?>
+	<!DOCTYPE repomd PUBLIC "-//Red Hat//repomd.xml DTD 1.0//EN" "http:///miroslav.suchy.cz/spacewalk/repomd.dtd">
+	<repomd>
+	...
+	</repomd>
+
+-->
+<!ELEMENT repomd (revision | data)+>
+<!ATTLIST repomd 
+	xmlns CDATA "http://linux.duke.edu/metadata/repo"
+	xmlns:rpm CDATA "http://linux.duke.edu/metadata/rpm"
+>
+
+<!ELEMENT revision (#PCDATA)>
+<!ELEMENT data (location | checksum | timestamp | open-checksum | open-size | size | database_version)+>
+<!ATTLIST data 
+	type (other_db | other | filelists_db | filelists | primary_db | primary | group | prestodelta | group_gz) #REQUIRED 
+>
+
+<!ELEMENT location EMPTY>
+<!ATTLIST location
+    href CDATA #REQUIRED
+	base CDATA #IMPLIED
+>
+
+<!ELEMENT checksum (#PCDATA)>
+<!ATTLIST checksum
+    type NMTOKEN #REQUIRED
+>
+
+<!ELEMENT timestamp (#PCDATA)>
+
+<!ELEMENT open-checksum (#PCDATA)>
+<!ATTLIST open-checksum
+    type NMTOKEN #REQUIRED
+>
+
+<!ELEMENT size (#PCDATA)>
+<!ELEMENT open-size (#PCDATA)>
+
+<!ELEMENT database_version (#PCDATA)>
commit 2e1ac8d5220de0614fd1c3aebb03ab8448f85202
Author: James Antill <james at and.org>
Date:   Fri Oct 8 17:02:02 2010 -0400

    Fix problems with remove+update.

diff --git a/yum/__init__.py b/yum/__init__.py
index 7445f9e..6a7db7a 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -3597,6 +3597,9 @@ class YumBase(depsolve.Depsolve):
                         self.tsInfo.addObsoleted(obsoletee, po)
                         tx_return.append(txmbr)
                 else:
+                    if self.tsInfo.getMembersWithState(installed_pkg.pkgtup,
+                                                       TS_REMOVE_STATES):
+                        self.tsInfo.remove(installed_pkg.pkgtup)
                     txmbr = self._add_up_txmbr(requiringPo, po, installed_pkg)
                     tx_return.append(txmbr)
                         
@@ -3620,6 +3623,9 @@ class YumBase(depsolve.Depsolve):
                 
                 else:
                     updated_pkg =  self.getInstalledPackageObject(updated)
+                    if self.tsInfo.getMembersWithState(updated,
+                                                       TS_REMOVE_STATES):
+                        self.tsInfo.remove(updated)
                     txmbr = self._add_up_txmbr(requiringPo,
                                                available_pkg, updated_pkg)
                     tx_return.append(txmbr)
@@ -3716,8 +3722,8 @@ class YumBase(depsolve.Depsolve):
             if self.tsInfo.getMembers(po.pkgtup):
                 # This allows multiple reinstalls and update/downgrade "cancel"
                 for txmbr in self.tsInfo.matchNaevr(po.name):
-                    self.logger.warning(_("Removing %s from the transaction") %
-                                        txmbr)
+                    self.logger.info(_("Removing %s from the transaction") %
+                                     txmbr)
                     self.tsInfo.remove(txmbr.pkgtup)
                 # Now start the remove/reinstall
             txmbr = self.tsInfo.addErase(po)
commit 4016d50c72c37c1fa324e1858ea083caf3cceda9
Author: James Antill <james at and.org>
Date:   Fri Oct 8 17:00:51 2010 -0400

    Add tests for remove+update, and update+remove.

diff --git a/cli.py b/cli.py
index a2a05bd..b3b760e 100644
--- a/cli.py
+++ b/cli.py
@@ -798,14 +798,16 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
            to be erased/removed"""
         
         oldcount = len(self.tsInfo)
-        
+
+        all_rms = []
         for arg in userlist:
-            if not self.remove(pattern=arg):
+            rms = self.remove(pattern=arg)
+            if not rms:
                 self._checkMaybeYouMeant(arg, always_output=False)
+            all_rms.extend(rms)
         
-        if len(self.tsInfo) > oldcount:
-            change = len(self.tsInfo) - oldcount
-            msg = _('%d packages marked for removal') % change
+        if all_rms:
+            msg = _('%d packages marked for removal') % len(all_rms)
             return 2, [msg]
         else:
             return 0, [_('No Packages marked for removal')]
diff --git a/test/simpleremovetests.py b/test/simpleremovetests.py
index e20e43c..be820bc 100644
--- a/test/simpleremovetests.py
+++ b/test/simpleremovetests.py
@@ -60,3 +60,66 @@ class SimpleRemoveTests(OperationsTests):
         res, msg = self.runOperation(['remove', 'foo'], [p.leaf, p.requires_file], [])
         self.assert_(res=='ok', msg)
         self.assertResult( () )
+
+    def testShellUpRm1(self):
+        """ Do an update for a package, and then rm it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+
+        res, msg = self.runOperation((['update', 'foo'],
+                                      ['remove', 'foo'],
+                                      ),
+                                     [pi1],
+                                     [pa1], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult(())
+
+    def testShellUpRm2(self):
+        """ Do an update for a package, and then rm it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+        pi2 = FakePackage('foo', '1', '1', '0', 'i686')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+        pa2 = FakePackage('foo', '2', '1', '0', 'i686')
+
+        res, msg = self.runOperation((['update', 'foo'],
+                                      ['remove', 'foo.i686'],
+                                      ),
+                                     [pi1, pi2],
+                                     [pa1, pa2], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pi1, ))
+
+    def testShellUpRm3(self):
+        """ Do an update for a package, and then rm it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+        pi2 = FakePackage('foo', '1', '1', '0', 'i686')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+        pa2 = FakePackage('foo', '2', '1', '0', 'i686')
+
+        res, msg = self.runOperation((['update', 'foo'],
+                                      ['remove', 'foo.x86_64'],
+                                      ),
+                                     [pi1, pi2],
+                                     [pa1, pa2], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pi2, ))
+
+    def testShellUpRm4(self):
+        """ Do an update for a package, and then rm it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+        pi2 = FakePackage('foo', '1', '1', '0', 'i686')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+        pa2 = FakePackage('foo', '2', '1', '0', 'i686')
+
+        res, msg = self.runOperation((['update', 'foo-2-1'],
+                                      ['remove', 'foo.i686'],
+                                      ),
+                                     [pi1, pi2],
+                                     [pa1, pa2], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pi1,))
+
diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
index df641f7..6bc2efe 100644
--- a/test/simpleupdatetests.py
+++ b/test/simpleupdatetests.py
@@ -809,3 +809,65 @@ class SimpleUpdateTests(OperationsTests):
                                      [pa1, pa2i, pa2x, pa3])
         self.assert_(res=='ok', msg)
         self.assertResult((pa1, pa2x, pa3))
+
+    def testShellRmUp1(self):
+        """ Do an rm for a package, and then update it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+
+        res, msg = self.runOperation((['remove', 'foo'],
+                                      ['update', 'foo'],
+                                      ),
+                                     [pi1],
+                                     [pa1], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pa1,))
+
+    def testShellRmUp2(self):
+        """ Do an rm for a package, and then update it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+        pi2 = FakePackage('foo', '1', '1', '0', 'i686')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+        pa2 = FakePackage('foo', '2', '1', '0', 'i686')
+
+        res, msg = self.runOperation((['remove', 'foo.i686'],
+                                      ['update', 'foo'],
+                                      ),
+                                     [pi1, pi2],
+                                     [pa1, pa2], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pa1, pa2))
+
+    def testShellRmUp3(self):
+        """ Do an rm for a package, and then update it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+        pi2 = FakePackage('foo', '1', '1', '0', 'i686')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+        pa2 = FakePackage('foo', '2', '1', '0', 'i686')
+
+        res, msg = self.runOperation((['remove', 'foo.x86_64'],
+                                      ['update', 'foo'],
+                                      ),
+                                     [pi1, pi2],
+                                     [pa1, pa2], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pa1, pa2))
+
+    def testShellRmUp4(self):
+        """ Do an rm for a package, and then update it. """
+        pi1 = FakePackage('foo', '1', '1', '0', 'x86_64')
+        pi2 = FakePackage('foo', '1', '1', '0', 'i686')
+
+        pa1 = FakePackage('foo', '2', '1', '0', 'x86_64')
+        pa2 = FakePackage('foo', '2', '1', '0', 'i686')
+
+        res, msg = self.runOperation((['remove', 'foo.i686'],
+                                      ['update', 'foo-2-1'],
+                                      ),
+                                     [pi1, pi2],
+                                     [pa1, pa2], multi_cmds=True)
+        self.assert_(res=='ok', msg)
+        self.assertResult((pa1, pa2))
commit f21a05a4f499d6831c773d63c59a4b70ddbd8d23
Author: James Antill <james at and.org>
Date:   Fri Oct 8 16:58:33 2010 -0400

    Allow tests to be multi-commands, aka. shell.

diff --git a/test/testbase.py b/test/testbase.py
index f91fbf1..803ce9c 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -399,7 +399,7 @@ class OperationsTests(_DepsolveTestsBase):
     """
 
     def runOperation(self, args, installed=[], available=[],
-                     confs={}):
+                     confs={}, multi_cmds=False):
         """Sets up and runs the depsolver. args[0] must be a valid yum command
         ("install", "update", ...). It might be followed by pkg names as on the
         yum command line. The pkg objects in installed are added to self.rpmdb and
@@ -428,9 +428,18 @@ class OperationsTests(_DepsolveTestsBase):
             po.repoid = po.repo.id
             self.depsolver._pkgSack.addPackage(po)
 
-        self.depsolver.basecmd = args[0]
-        self.depsolver.extcmds = args[1:]
-        res, msg = self.depsolver.doCommands()
+        if not multi_cmds:
+            self.depsolver.basecmd = args[0]
+            self.depsolver.extcmds = args[1:]
+            res, msg = self.depsolver.doCommands()
+        else:
+            for nargs in args:
+                self.depsolver.basecmd = nargs[0]
+                self.depsolver.extcmds = nargs[1:]
+                res, msg = self.depsolver.doCommands()
+                if res != 2:
+                    return res, msg
+
         self.tsInfo = depsolver.tsInfo
         if res!=2:
             return res, msg


More information about the Yum-commits mailing list