From c87c52cc4587975a314200064306542bd14f9540 Mon Sep 17 00:00:00 2001 From: Sebastian Luther Date: Fri, 20 Aug 2010 10:34:05 +0200 Subject: slot collision handler: Drop solutions that violate REQUIRED_USE --- pym/_emerge/resolver/slot_collision.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'pym/_emerge') diff --git a/pym/_emerge/resolver/slot_collision.py b/pym/_emerge/resolver/slot_collision.py index 9f023f9ee..53cebf6ea 100644 --- a/pym/_emerge/resolver/slot_collision.py +++ b/pym/_emerge/resolver/slot_collision.py @@ -2,6 +2,7 @@ from __future__ import print_function from _emerge.AtomArg import AtomArg from _emerge.PackageArg import PackageArg +from portage.dep import check_required_use from portage.output import colorize from portage.sets.base import InternalPackageSet from portage.util import writemsg @@ -716,6 +717,23 @@ class slot_conflict_handler(object): if not is_valid_solution: break + #Make sure the changes don't violate REQUIRED_USE + for pkg in required_changes: + required_use = pkg.metadata["REQUIRED_USE"] + if not required_use: + continue + + use = set(_pkg_use_enabled(pkg)) + for flag, state in required_changes[pkg].items(): + if state == "enabled": + use.add(flag) + else: + use.discard(flag) + + if not check_required_use(required_use, use, pkg.iuse.is_valid_flag): + is_valid_solution = False + break + if is_valid_solution and required_changes: return required_changes else: -- cgit v1.2.3-1-g7c22