From 4b897286cf94c6ec2c556a75ea2e67798e1157cc Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 1 Dec 2012 15:22:59 -0800 Subject: [PATCH] emerge --depclean: rm unavailable slot bug 445506 --- pym/_emerge/depgraph.py | 8 ++ .../test_depclean_slot_unavailable.py | 79 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 pym/portage/tests/resolver/test_depclean_slot_unavailable.py diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index f5fe4352f..65a94ab37 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -4634,6 +4634,14 @@ class depgraph(object): unmasked = [pkg for pkg in matches if not pkg.masks] if unmasked: matches = unmasked + if len(matches) > 1: + # Now account for packages for which existing + # ebuilds are masked or unavailable (bug #445506). + unmasked = [pkg for pkg in matches if + self._equiv_ebuild_visible(pkg)] + if unmasked: + matches = unmasked + pkg = matches[-1] # highest match in_graph = self._dynamic_config._slot_pkg_map[root].get(pkg.slot_atom) return pkg, in_graph diff --git a/pym/portage/tests/resolver/test_depclean_slot_unavailable.py b/pym/portage/tests/resolver/test_depclean_slot_unavailable.py new file mode 100644 index 000000000..9d1718971 --- /dev/null +++ b/pym/portage/tests/resolver/test_depclean_slot_unavailable.py @@ -0,0 +1,79 @@ +# Copyright 2012 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 DepcleanUnavailableSlotTestCase(TestCase): + + def testDepcleanUnavailableSlot(self): + """ + Test bug #445506, where we want to remove the slot + for which the ebuild is no longer available, even + though its version is higher. + """ + + ebuilds = { + "sys-kernel/gentoo-sources-3.0.53": { + "SLOT": "3.0.53", + "KEYWORDS": "x86" + }, + } + + installed = { + "sys-kernel/gentoo-sources-3.0.53": { + "SLOT": "3.0.53", + "KEYWORDS": "x86" + }, + "sys-kernel/gentoo-sources-3.2.21": { + "SLOT": "3.2.21", + "KEYWORDS": "x86" + }, + } + + world = [ "sys-kernel/gentoo-sources" ] + + test_cases = ( + + ResolverPlaygroundTestCase( + [], + options = {"--depclean": True}, + success = True, + cleanlist = ["sys-kernel/gentoo-sources-3.2.21"]), + ) + + playground = ResolverPlayground(ebuilds=ebuilds, + installed=installed, world=world, debug=False) + 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() + + # Now make the newer version availale and verify that + # the lower version is depcleaned. + ebuilds.update({ + "sys-kernel/gentoo-sources-3.2.21": { + "SLOT": "3.2.21", + "KEYWORDS": "x86" + }, + }) + + test_cases = ( + ResolverPlaygroundTestCase( + [], + options = {"--depclean": True}, + success = True, + cleanlist = ["sys-kernel/gentoo-sources-3.0.53"]), + ) + + playground = ResolverPlayground(ebuilds=ebuilds, + installed=installed, world=world, debug=False) + 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() -- 2.26.2