From 05a8d3512c5880d45f2e44b95127c2cac676be9d Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 9 Jul 2011 18:57:50 -0700 Subject: [PATCH] circular_dependency: fix REQUIRED_USE test --- pym/_emerge/resolver/circular_dependency.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pym/_emerge/resolver/circular_dependency.py b/pym/_emerge/resolver/circular_dependency.py index cb64962f2..e4d679f0f 100644 --- a/pym/_emerge/resolver/circular_dependency.py +++ b/pym/_emerge/resolver/circular_dependency.py @@ -138,7 +138,24 @@ class circular_dependency_handler(object): usemask, useforce = self._get_use_mask_and_force(parent) autounmask_changes = self._get_autounmask_changes(parent) untouchable_flags = frozenset(chain(usemask, useforce, autounmask_changes)) + affecting_use.difference_update(untouchable_flags) + + #If any of the flags we're going to touch is in REQUIRED_USE, add all + #other flags in REQUIRED_USE to affecting_use, to not lose any solution. + required_use_flags = get_required_use_flags(parent.metadata["REQUIRED_USE"]) + + if affecting_use.intersection(required_use_flags): + # TODO: Find out exactly which REQUIRED_USE flags are + # entangled with affecting_use. We have to limit the + # number of flags since the number of loops is + # exponentially related (see bug #374397). + total_flags = set() + total_flags.update(affecting_use, required_use_flags) + if len(total_flags) <= 10: + affecting_use.update(required_use_flags) + affecting_use.difference_update(untouchable_flags) + affecting_use = tuple(affecting_use) if not affecting_use: -- 2.26.2