Subject: Re: bug#44981: 28.0.50; Restore nnimap-split-download-body?

From: Eric Abrahamsen <[email-masked]>
Date: Wed, 02 Dec 2020 15:56:22 -0800

Lars Ingebrigtsen <[email-masked]> writes:

> Eric Abrahamsen <[email-masked]> writes:
>
>> This looks unintentional, and I'd like to apply the attached diff,
>> restoring `nnimap-split-download-body' as a user option, and getting rid
>> of the default variable, which seems unnecessary. If this seems okay
>> I'll do up a proper commit, and make sure the documentation is all
>> accurate.
>
> I think it's unintentional, yes, so that sounds like a good plan.  You
> can't get rid of the variable, though (there'll be external packages
> relying on it), but you can make it obsolete.
>
>> The same user who reported this also expressed a desire to be able to
>> download message bodies conditionally, based on the headers, only if
>> a split rule required it. I'm not at all sure about the feasibility of
>> that, but wanted to see if anyone else had an opinion.
>
> I don't see any way to do that without making splitting unbearably slow.

No, me neither.

Here's a proper commit. I moved the bulk of the documentation to the
section on IMAP client-side splitting. Originally it was only mentioned
in the docs for the Spam package, with a link to IMAP splitting, but
then not actually mentioned in the IMAP splitting section.

Eric

>From 668f59da7b58e6c24b3bac7f6b5e02103d32363a Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <[email-masked]>
Date: Wed, 2 Dec 2020 15:52:25 -0800
Subject: [PATCH] Restore nnimap-split-download-body as a customization option

* lisp/gnus/nnimap.el (nnimap-split-download-body): And add an
obsolete alias for `nnimap-split-download-body-default'.
(nnimap-fetch-inbox): Check the value of the option, not the variable.
* doc/misc/gnus.texi (Client-Side IMAP Splitting): Move the primary
documentation of this option to this section.
---
 doc/misc/gnus.texi  | 16 +++++++++-------
 lisp/gnus/nnimap.el | 15 +++++++++++----
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 81ce13945c..4aa07ce388 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -14521,6 +14521,14 @@ Client-Side IMAP Splitting
 
 @end table
 
+@vindex nnimap-split-download-body
+By default, the nnimap back end only retrieves the message headers;
+the option @code{nnimap-split-download-body} (which is a regular
+customization option, not a server variable) tells it to retrieve the
+message bodies as well.  We don't set this by default because it will
+slow @acronym{IMAP} down, and that is not an appropriate decision to
+make on behalf of the user.
+
 Here's a complete example @code{nnimap} backend with a client-side
 ``fancy'' splitting method:
 
@@ -24622,13 +24630,7 @@ Filtering Incoming Mail
 Note for IMAP users: if you use the @code{spam-check-bogofilter},
 @code{spam-check-ifile}, and @code{spam-check-stat} spam back ends,
 you should also set the variable @code{nnimap-split-download-body} to
-@code{t}.  These spam back ends are most useful when they can ``scan''
-the full message body.  By default, the nnimap back end only retrieves
-the message headers; @code{nnimap-split-download-body} tells it to
-retrieve the message bodies as well.  We don't set this by default
-because it will slow @acronym{IMAP} down, and that is not an
-appropriate decision to make on behalf of the user.  @xref{Client-Side
-IMAP Splitting}.
+@code{t}.  @xref{Client-Side IMAP Splitting}.
 
 You have to specify one or more spam back ends for @code{spam-split}
 to use, by setting the @code{spam-use-*} variables.  @xref{Spam Back
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 7984998d21..e7f9451986 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -146,13 +146,20 @@ nnimap-request-articles-find-limit
   :version "24.4"
   :group 'nnimap)
 
+(defcustom nnimap-split-download-body nil
+  "If non-nil, make message bodies available for consideration during splitting.
+This requires downloading the full message from the IMAP server
+during splitting, which may be slow."
+  :type 'boolean)
+
+(define-obsolete-variable-alias
+  'nnimap-split-download-body-default 'nnimap-split-download-body
+  "28.1")
+
 (defvar nnimap-process nil)
 
 (defvar nnimap-status-string "")
 
-(defvar nnimap-split-download-body-default nil
-  "Internal variable with default value for `nnimap-split-download-body'.")
-
 (defvar nnimap-keepalive-timer nil)
 (defvar nnimap-process-buffers nil)
 
@@ -2100,7 +2107,7 @@ nnimap-fetch-inbox
 		 "BODY.PEEK"
 	       "RFC822.PEEK"))
 	    (cond
-	     (nnimap-split-download-body-default
+	     (nnimap-split-download-body
 	      "[]")
 	     ((nnimap-ver4-p)
 	      "[HEADER]")
-- 
2.29.2