Fix small bug in _show_circular_deps and add some tests
authorSebastian Luther <SebastianLuther@gmx.de>
Wed, 18 Aug 2010 20:08:58 +0000 (22:08 +0200)
committerZac Medico <zmedico@gentoo.org>
Wed, 18 Aug 2010 20:22:36 +0000 (13:22 -0700)
pym/_emerge/depgraph.py
pym/portage/tests/resolver/test_circular_dependencies.py [new file with mode: 0644]

index 7be8db139628434e91dc73f4d6980b55b8077218..907c6f634a412299270a8d9c34772abce81af42f 100644 (file)
@@ -4103,9 +4103,8 @@ class depgraph(object):
                shortest_cycle = None
                cycles = mygraph.get_cycles(ignore_priority=DepPrioritySatisfiedRange.ignore_medium_soft)
                for cycle in cycles:
-                       if not shortest_cycle or len(shortest_cycle) < len(cycle):
+                       if not shortest_cycle or len(cycle) < len(shortest_cycle):
                                shortest_cycle = cycle
-
                # Display the USE flags that are enabled on nodes that are part
                # of dependency cycles in case that helps the user decide to
                # disable some of them.
diff --git a/pym/portage/tests/resolver/test_circular_dependencies.py b/pym/portage/tests/resolver/test_circular_dependencies.py
new file mode 100644 (file)
index 0000000..3a46140
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import ResolverPlayground, ResolverPlaygroundTestCase
+
+class CircularDependencyTestCase(TestCase):
+
+       def testCircularDependency(self):
+               ebuilds = {
+                       "dev-libs/A-1": { "DEPEND": "foo? ( =dev-libs/B-1 )", "IUSE": "+foo", "EAPI": 1 }, 
+                       "dev-libs/A-2": { "DEPEND": "=dev-libs/B-1" }, 
+                       "dev-libs/A-3": { "DEPEND": "foo? ( =dev-libs/B-2 )", "IUSE": "+foo", "EAPI": 1 }, 
+                       "dev-libs/B-1": { "DEPEND": "dev-libs/C dev-libs/D" }, 
+                       "dev-libs/B-2": { "DEPEND": "bar? ( dev-libs/C dev-libs/D )", "IUSE": "+bar", "EAPI": 1 }, 
+                       "dev-libs/C-1": { "DEPEND": "dev-libs/A" }, 
+                       "dev-libs/D-1": { "DEPEND": "dev-libs/E " }, 
+                       "dev-libs/E-1": { "DEPEND": "dev-libs/F" }, 
+                       "dev-libs/F-1": { "DEPEND": "dev-libs/B" }, 
+                       
+                       "dev-libs/Z-1": { "DEPEND": "!baz? ( dev-libs/Y )", "IUSE": "baz" }, 
+                       "dev-libs/Y-1": { "DEPEND": "dev-libs/Z" },
+                       }
+
+               test_cases = (
+                       ResolverPlaygroundTestCase(
+                               ["=dev-libs/A-1"],
+                               success = False),
+                       ResolverPlaygroundTestCase(
+                               ["=dev-libs/A-2"],
+                               success = False),
+                       ResolverPlaygroundTestCase(
+                               ["=dev-libs/A-3"],
+                               success = False),
+                       ResolverPlaygroundTestCase(
+                               ["dev-libs/Z"],
+                               success = False),
+               )
+
+               playground = ResolverPlayground(ebuilds=ebuilds)
+               try:
+                       for test_case in test_cases:
+                               playground.run_TestCase(test_case)
+                               self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+               finally:
+                       playground.cleanup()