emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e84a1ff: Avoid modifying nnimap user option in spam.el


From: Basil L. Contovounesios
Subject: master e84a1ff: Avoid modifying nnimap user option in spam.el
Date: Sun, 6 Dec 2020 07:03:01 -0500 (EST)

branch: master
commit e84a1ffde9047c1ca0acb9abcd6d31e3bfba457d
Author: Basil L. Contovounesios <contovob@tcd.ie>
Commit: Basil L. Contovounesios <contovob@tcd.ie>

    Avoid modifying nnimap user option in spam.el
    
    * lisp/gnus/nnimap.el (nnimap--split-download-body): New variable.
    (nnimap-fetch-inbox): Use it in conjunction with
    nnimap-split-download-body.
    * lisp/gnus/spam.el: Don't load nnimap.el at compile time for a
    dynamic variable.
    (spam-setup-widening): Rather than unconditionally set user option
    nnimap-split-download-body, set nnimap--split-download-body to a
    unique non-nil value only if the variable was nil (bug#44981).
    (spam-teardown-widening): New function that undoes this if
    nnimap--split-download-body still holds the unique value.
    (spam-unload-hook): Call spam-teardown-widening to revert any change
    to the value of nnimap--split-download-body.
---
 lisp/gnus/nnimap.el |  6 +++++-
 lisp/gnus/spam.el   | 26 +++++++++++++++++---------
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index a860333..c8b700e 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -157,6 +157,9 @@ during splitting, which may be slow."
   :version "28.1"
   :type 'boolean)
 
+(defvar nnimap--split-download-body nil
+  "Like `nnimap-split-download-body', but for internal use.")
+
 (defvar nnimap-process nil)
 
 (defvar nnimap-status-string "")
@@ -2108,7 +2111,8 @@ Return the server's response to the SELECT or EXAMINE 
command."
                 "BODY.PEEK"
               "RFC822.PEEK"))
            (cond
-            (nnimap-split-download-body
+             ((or nnimap-split-download-body
+                  nnimap--split-download-body)
              "[]")
             ((nnimap-ver4-p)
              "[HEADER]")
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index 27e559d..e74aef3 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -44,12 +44,9 @@
 ;;; for the definitions of group content classification and spam processors
 (require 'gnus)
 
-(eval-when-compile (require 'hashcash))
-
-;; for nnimap-split-download-body
-(eval-when-compile (require 'nnimap))
-
-(eval-when-compile (require 'cl-lib))
+(eval-when-compile
+  (require 'cl-lib)
+  (require 'hashcash))
 
 ;; autoload query-dig
 (autoload 'query-dig "dig")
@@ -1228,10 +1225,20 @@ Will not return a nil score."
 
 ;;{{{ set up widening, processor checks
 
-;;; set up IMAP widening if it's necessary
+(defconst spam--widened (list ())
+  "Unique value identifying changes to `nnimap--split-download-body'.")
+
 (defun spam-setup-widening ()
-  (when (spam-widening-needed-p)
-    (setq nnimap-split-download-body t)))
+  "Set up IMAP widening if it's necessary."
+  (and (boundp 'nnimap--split-download-body)
+       (not nnimap--split-download-body)
+       (spam-widening-needed-p)
+       (setq nnimap--split-download-body spam--widened)))
+
+(defun spam-teardown-widening ()
+  "Tear down IMAP widening."
+  (when (eq (bound-and-true-p nnimap--split-download-body) spam--widened)
+    (setq nnimap--split-download-body nil)))
 
 (defun spam-widening-needed-p (&optional force-symbols)
   (let (found)
@@ -2865,6 +2872,7 @@ installed through `spam-necessary-extra-headers'."
 (defun spam-unload-hook ()
   "Uninstall the spam.el hooks."
   (interactive)
+  (spam-teardown-widening)
   (remove-hook 'gnus-save-newsrc-hook 'spam-maybe-spam-stat-save)
   (remove-hook 'gnus-get-top-new-news-hook 'spam-maybe-spam-stat-load)
   (remove-hook 'gnus-startup-hook 'spam-maybe-spam-stat-load)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]