summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/resolver/slot_collision.py
diff options
context:
space:
mode:
authorSebastian Luther <SebastianLuther@gmx.de>2010-08-20 10:34:05 +0200
committerZac Medico <zmedico@gentoo.org>2010-08-20 05:15:54 -0700
commitc87c52cc4587975a314200064306542bd14f9540 (patch)
treea1bcb461cb12ae776cc235278b9b677f45083fae /pym/_emerge/resolver/slot_collision.py
parent57cec9204a387ce27ce4703175b16189b3fdc45f (diff)
downloadportage-c87c52cc4587975a314200064306542bd14f9540.tar.gz
portage-c87c52cc4587975a314200064306542bd14f9540.tar.bz2
portage-c87c52cc4587975a314200064306542bd14f9540.zip
slot collision handler: Drop solutions that violate REQUIRED_USE
Diffstat (limited to 'pym/_emerge/resolver/slot_collision.py')
-rw-r--r--pym/_emerge/resolver/slot_collision.py18
1 files changed, 18 insertions, 0 deletions
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: