Try to keep the server/method cache unique.
authorLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Wed, 22 Sep 2010 15:21:41 +0000 (17:21 +0200)
committerLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Wed, 22 Sep 2010 15:21:41 +0000 (17:21 +0200)
* gnus.el (gnus-method-to-server): Don't push things to the cache
unless it's unique.
(gnus-server-to-method): Ditto.

lisp/ChangeLog
lisp/gnus.el

index 8210386..0299df0 100644 (file)
@@ -1,3 +1,9 @@
+2010-09-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-method-to-server): Don't push things to the cache
+       unless it's unique.
+       (gnus-server-to-method): Ditto.
+
 2010-09-22  Teodor Zlatanov  <tzz@lifelogs.com>
 
        * nnimap.el (nnimap-delete-article): Tell user if expunge won't happen.
index eb20575..ba790fb 100644 (file)
@@ -3565,7 +3565,7 @@ that that variable is buffer-local to the summary buffers."
                                   (nth 1 method))))
       method)))
 
-(defsubst gnus-method-to-server (method &optional nocache)
+(defsubst gnus-method-to-server (method &optional nocache no-enter-cache)
   (catch 'server-name
     (setq method (or method gnus-select-method))
 
@@ -3591,7 +3591,9 @@ that that variable is buffer-local to the summary buffers."
                     (format "%s" (car method))
                   (format "%s:%s" (car method) (cadr method))))
           (name-method (cons name method)))
-      (unless (member name-method gnus-server-method-cache)
+      (when (and (not (member name-method gnus-server-method-cache))
+                (not no-enter-cache)
+                (not (assoc (car name-method) gnus-server-method-cache)))
        (push name-method gnus-server-method-cache))
       name)))
 
@@ -3633,11 +3635,13 @@ that that variable is buffer-local to the summary buffers."
                (while alist
                  (setq method (gnus-info-method (pop alist)))
                  (when (and (not (stringp method))
-                            (equal server (gnus-method-to-server method)))
+                            (equal server
+                                   (gnus-method-to-server method nil t)))
                    (setq match method
                          alist nil)))
                match))))
-       (when result
+       (when (and result
+                  (not (assoc server gnus-server-method-cache)))
          (push (cons server result) gnus-server-method-cache))
        result)))