Bug #336692 - When stack_lists() detects unmatched removal atoms,
authorZac Medico <zmedico@gentoo.org>
Wed, 15 Sep 2010 03:38:38 +0000 (20:38 -0700)
committerZac Medico <zmedico@gentoo.org>
Wed, 15 Sep 2010 03:38:38 +0000 (20:38 -0700)
account for cases in which the same profile is inherited multiple times
in the same stack.

pym/portage/util/__init__.py

index 8bbc15b92b7b994d7b75460f9e2a87d6089662cd..4cd394b632f4e0d1ee5d4073be8d26824eda1d2d 100644 (file)
@@ -236,9 +236,11 @@ def stack_lists(lists, incremental=1, remember_source_file=False, warn_for_unmat
        distinct values using '-value' notation. Higher index is preferenced.
 
        all elements must be hashable."""
+       matched_removals = set()
        new_list = {}
        for sub_list in lists:
                for token in sub_list:
+                       token_key = token
                        if remember_source_file:
                                token, source_file = token
                        else:
@@ -254,9 +256,14 @@ def stack_lists(lists, incremental=1, remember_source_file=False, warn_for_unmat
                                        try:
                                                new_list.pop(token[1:])
                                        except KeyError:
-                                               if warn_for_unmatched_removal:
+                                               if warn_for_unmatched_removal and \
+                                                       not (source_file and token_key in matched_removals):
                                                        writemsg(_("--- Unmatch removal atom in %s: %s\n") % (source_file, token),
                                                                noiselevel=-1)
+                                       else:
+                                               # Remember this match, in case this profile is
+                                               # inherited multiple times in this stack.
+                                               matched_removals.add(token_key)
                                else:
                                        new_list[token] = source_file
                        else: