[yum-git] Branch 'yum-3_2_X' - test/depsolvetests.py yum/depsolve.py

James Antill james at linux.duke.edu
Sat Aug 9 19:24:35 UTC 2008


 test/depsolvetests.py |   17 +++++++++++++++++
 yum/depsolve.py       |   20 +++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)

New commits:
commit 92f360344742fa3fca38d97846cb7a31f3dd88bf
Author: James Antill <james at and.org>
Date:   Sat Aug 9 15:24:26 2008 -0400

    Shared lib. deps sorted after pkg. deps., solves test_multi_inst_dep3, 443459

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 44731d0..a0e607b 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -1024,3 +1024,20 @@ class DepsolveTests(DepsolveTests):
 
         self.assertEquals('ok', *self.resolveCode())
         self.assertResult((ipo1, po1))
+
+    def test_multi_inst_dep3(self):
+        ipo1 = FakePackage('foo')
+        ipo1.addRequires('libbar-prov1.so.0()', None, (None, None, None))
+        ipo1.addRequires('bar-prov2', None, (None, None, None))
+        self.tsInfo.addInstall(ipo1)
+
+        po1 = FakePackage('bar')
+        po1.addProvides('libbar-prov1.so.0()', None, (None, None, None))
+        po1.addProvides('bar-prov2', None, (None, None, None))
+        self.xsack.addPackage(po1)
+        po2 = FakePackage('bar', version='2')
+        po2.addProvides('libbar-prov1.so.0()', None, (None, None, None))
+        self.xsack.addPackage(po2)
+
+        self.assertEquals('ok', *self.resolveCode())
+        self.assertResult((ipo1, po1))
diff --git a/yum/depsolve.py b/yum/depsolve.py
index ef84143..431190c 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -798,7 +798,25 @@ class Depsolve(object):
 
         mapper = {'EQ' : 1, 'LT' : 2, 'LE' : 3, 'GT' : 4, 'GE' : 5,
                   None : 99}
-        return mapper.get(pkgtup1[1], 10) - mapper.get(pkgtup2[1], 10)
+        ret = mapper.get(pkgtup1[1], 10) - mapper.get(pkgtup2[1], 10)
+        if ret:
+            return ret
+
+        # This is pretty magic, basically we want and explicit:
+        #
+        #  Requires: foo
+        #
+        # ...to happen before the implicit:
+        #
+        #  Requires: libfoo.so.0()
+        #
+        # ...need more magic for other implicit deps. here?
+        def _req_name2val(name):
+            if (name.startswith("lib") and
+                (name.endswith("()") or name.endswith("()(64bit)"))):
+                return 99 # Processes these last
+            return 0
+        return _req_name2val(pkgtup1[0]) - _req_name2val(pkgtup2[0])
 
     def _checkInstall(self, txmbr):
         txmbr_reqs = txmbr.po.returnPrco('requires')



More information about the Yum-cvs-commits mailing list