Limit the spam caused by unmatched removal atoms
authorSebastian Luther <SebastianLuther@gmx.de>
Wed, 15 Sep 2010 06:29:10 +0000 (08:29 +0200)
committerZac Medico <zmedico@gentoo.org>
Wed, 15 Sep 2010 06:44:11 +0000 (23:44 -0700)
pym/portage/util/__init__.py

index 4cd394b632f4e0d1ee5d4073be8d26824eda1d2d..961743ce291ad3187fccc48f36e9b359c1932160 100644 (file)
@@ -236,7 +236,7 @@ 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()
+       unmatched_removals = {}
        new_list = {}
        for sub_list in lists:
                for token in sub_list:
@@ -256,19 +256,22 @@ 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 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)
+                                               unmatched_removals.setdefault(source_file, set()).add(token)
                                else:
                                        new_list[token] = source_file
                        else:
                                new_list[token] = source_file
 
+       if warn_for_unmatched_removal:
+               for source_file, tokens in unmatched_removals.items():
+                       if len(tokens) > 3:
+                               selected = [tokens.pop(), tokens.pop(), tokens.pop()]
+                               writemsg(_("--- Unmatch removal atoms in %s: %s and %s more\n") % (source_file, ", ".join(selected), len(tokens)-3),
+                                       noiselevel=-1)
+                       else:
+                               writemsg(_("--- Unmatch removal atom(s) in %s: %s\n") % (source_file, ", ".join(tokens)),
+                                       noiselevel=-1)
+
        if remember_source_file:
                return list(new_list.items())
        else: