summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Luther <SebastianLuther@gmx.de>2010-08-18 22:08:58 +0200
committerZac Medico <zmedico@gentoo.org>2010-08-18 13:22:36 -0700
commit2b3899313bda0a1f7adf011cbe9f2b29c1f15394 (patch)
tree6c242ba94c745cde577948908f33ff0b126829a9
parent5fef7df32495bdf0040650ee6990edf6d4a0572e (diff)
downloadportage-2b3899313bda0a1f7adf011cbe9f2b29c1f15394.tar.gz
portage-2b3899313bda0a1f7adf011cbe9f2b29c1f15394.tar.bz2
portage-2b3899313bda0a1f7adf011cbe9f2b29c1f15394.zip
Fix small bug in _show_circular_deps and add some tests
-rw-r--r--pym/_emerge/depgraph.py3
-rw-r--r--pym/portage/tests/resolver/test_circular_dependencies.py46
2 files changed, 47 insertions, 2 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 7be8db139..907c6f634 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -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
index 000000000..3a46140ca
--- /dev/null
+++ b/pym/portage/tests/resolver/test_circular_dependencies.py
@@ -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()