]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent gnus-registry-handle-action from creating spurious entries
authorEric Abrahamsen <eric@ericabrahamsen.net>
Thu, 30 Apr 2020 01:10:35 +0000 (18:10 -0700)
committerEric Abrahamsen <eric@ericabrahamsen.net>
Wed, 20 May 2020 18:42:30 +0000 (11:42 -0700)
Thanks to Bob Newell for finding this.

* lisp/gnus/gnus-registry.el (gnus-registry-handle-action): If a
message entry ends up with no groups in its 'group key, that means the
entry should be deleted.

lisp/gnus/gnus-registry.el

index 480ed80ef81f15589c56f34c783bbeaa085e7342..f306889a7fcbcfb27b2d0f77faac946093f77b94 100644 (file)
@@ -485,23 +485,25 @@ This is not required after changing `gnus-registry-cache-file'."
     (when from
       (setq entry (cons (delete from (assoc 'group entry))
                         (assq-delete-all 'group entry))))
-
-    (dolist (kv `((group ,to)
-                  (sender ,sender)
-                  (recipient ,@recipients)
-                  (subject ,subject)))
-      (when (cadr kv)
-        (let ((new (or (assq (car kv) entry)
-                       (list (car kv)))))
-          (dolist (toadd (cdr kv))
-            (unless (member toadd new)
-              (setq new (append new (list toadd)))))
-          (setq entry (cons new
-                            (assq-delete-all (car kv) entry))))))
-    (gnus-message 10 "Gnus registry: new entry for %s is %S"
-                  id
-                  entry)
-    (gnus-registry-insert db id entry)))
+    ;; Only keep the entry if the message is going to a new group, or
+    ;; it's still in some previous group.
+    (when (or to (alist-get 'group entry))
+      (dolist (kv `((group ,to)
+                    (sender ,sender)
+                    (recipient ,@recipients)
+                    (subject ,subject)))
+       (when (cadr kv)
+          (let ((new (or (assq (car kv) entry)
+                        (list (car kv)))))
+            (dolist (toadd (cdr kv))
+              (unless (member toadd new)
+               (setq new (append new (list toadd)))))
+            (setq entry (cons new
+                              (assq-delete-all (car kv) entry))))))
+      (gnus-message 10 "Gnus registry: new entry for %s is %S"
+                    id
+                    entry)
+      (gnus-registry-insert db id entry))))
 
 ;; Function for nn{mail|imap}-split-fancy: look up all references in
 ;; the cache and if a match is found, return that group.