From 2b3899313bda0a1f7adf011cbe9f2b29c1f15394 Mon Sep 17 00:00:00 2001 From: Sebastian Luther Date: Wed, 18 Aug 2010 22:08:58 +0200 Subject: Fix small bug in _show_circular_deps and add some tests --- pym/_emerge/depgraph.py | 3 +- .../tests/resolver/test_circular_dependencies.py | 46 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 pym/portage/tests/resolver/test_circular_dependencies.py 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() -- cgit v1.2.3-1-g7c22