From: Eric Abrahamsen Date: Mon, 17 Jun 2019 02:14:25 +0000 (-0700) Subject: Prevent the Gnus registry from being loaded twice at startup X-Git-Tag: emacs-27.0.90~2456 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2815174f100798c6c84f4098dc6eb28336aa951e;p=emacs.git Prevent the Gnus registry from being loaded twice at startup * lisp/gnus/gnus-registry.el (gnus-registry-load): Check if the registry is already loaded, and don't load again unless new optional FORCE argument is non-nil. (gnus-registry-clear): New function to clear the registry, added as a Gnus shutdown. Now that loading doesn't unilaterally reset the registry, we need to make sure it is reloaded when Gnus is. --- diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 6e549cf246d..e488858ebe0 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el @@ -307,33 +307,40 @@ This is not required after changing `gnus-registry-cache-file'." (gnus-message 4 "Remaking the Gnus registry") (setq gnus-registry-db (gnus-registry-make-db)))) -(defun gnus-registry-load () - "Load the registry from the cache file." +(defun gnus-registry-load (&optional force) + "Load the registry from the cache file. +If the registry is already loaded, don't reload unless FORCE is +non-nil." (interactive) - (let ((file gnus-registry-cache-file)) - (condition-case nil - (gnus-registry-read file) - (file-error - ;; Fix previous mis-naming of the registry file. - (let ((old-file-name - (concat (file-name-sans-extension - gnus-registry-cache-file) - ".eioio"))) - (if (and (file-exists-p old-file-name) - (yes-or-no-p - (format "Rename registry file from %s to %s? " - old-file-name file))) - (progn - (gnus-registry-read old-file-name) - (setf (oref gnus-registry-db file) file) - (gnus-message 1 "Registry filename changed to %s" file)) - (gnus-registry-remake-db t)))) - (error - (gnus-message - 1 - "The Gnus registry could not be loaded from %s, creating a new one" - file) - (gnus-registry-remake-db t))))) + (when (or force + ;; The registry is loaded by both + ;; `gnus-registry-initialize' and the read-newsrc hook. + ;; Don't load twice. + (null (eieio-object-p gnus-registry-db))) + (let ((file gnus-registry-cache-file)) + (condition-case nil + (gnus-registry-read file) + (file-error + ;; Fix previous mis-naming of the registry file. + (let ((old-file-name + (concat (file-name-sans-extension + gnus-registry-cache-file) + ".eioio"))) + (if (and (file-exists-p old-file-name) + (yes-or-no-p + (format "Rename registry file from %s to %s? " + old-file-name file))) + (progn + (gnus-registry-read old-file-name) + (setf (oref gnus-registry-db file) file) + (gnus-message 1 "Registry filename changed to %s" file)) + (gnus-registry-remake-db t)))) + (error + (gnus-message + 1 + "The Gnus registry could not be loaded from %s, creating a new one" + file) + (gnus-registry-remake-db t)))))) (defun gnus-registry-read (file) "Do the actual reading of the registry persistence file." @@ -1102,6 +1109,12 @@ only the last one's marks are returned." (gnus-registry-set-id-key id key val)))) (message "Import done, collected %d entries" count)))) +(defun gnus-registry-clear () + "Clear the registry." + (setq gnus-registry-db nil)) + +(gnus-add-shutdown 'gnus-registry-clear 'gnus) + ;;;###autoload (defun gnus-registry-initialize () "Initialize the Gnus registry."