emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master f580ea1 2/2: Revert "nnimap.el: support additional


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] master f580ea1 2/2: Revert "nnimap.el: support additional expunge options"
Date: Wed, 25 Jan 2017 00:19:32 +0000 (UTC)

branch: master
commit f580ea195bfdef71de1642311f27c2aff1e4b41c
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>

    Revert "nnimap.el: support additional expunge options"
    
    This reverts commit 4e9baea6aba1633074889339dcc7cdc9d73880d3.
    
    The patch broke fetching new mail:
    
    Debugger entered--Lisp error: (error "Format specifier doesn’t match 
argument type")
      format("%d .*\n" (t ("OK" ("HIGHESTMODSEQ" "914696") "Expunge" 
"completed.") ("VANISHED" "1825937") ("0" "RECENT")))
      (looking-at (format "%d .*\n" sequence))
      (not (looking-at (format "%d .*\n" sequence)))
      (progn (while (and (not (bobp)) (progn (forward-line -1) (looking-at 
"\\*\\|[0-9]+ OK NOOP")))) (not (looking-at (format "%d .*\n" sequence))))
---
 doc/misc/gnus.texi  |   16 ++--------
 etc/NEWS            |   10 ------
 lisp/gnus/nnimap.el |   87 ++++++++++++++++++++++-----------------------------
 3 files changed, 40 insertions(+), 73 deletions(-)

diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index e8524fb..05159d4 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -14273,19 +14273,9 @@ specific login method to be used, you can set this 
variable to either
 @code{plain} or @code{cram-md5}.
 
 @item nnimap-expunge
-When to expunge deleted messages.  If @code{never}, deleted articles
-are marked with the IMAP @code{\\Delete} flag but not automatically
-expunged. If @code{immediately}, deleted articles are immediately expunged
-(this requires the server to support the UID EXPUNGE command). If
address@hidden, deleted articles are flagged, and all flagged articles are
-expunged when the group is closed.
-
-For backwards compatibility, this variable may also be set to t
-or nil. If the server supports UID EXPUNGE, both t and nil are
-equivalent to @code{immediately}. If the server does not support UID
-EXPUNGE nil is equivalent to @code{never}, while t will immediately
-expunge ALL articles that are currently flagged as deleted
-(i.e., potentially not only the article that was just deleted).
+If address@hidden, expunge articles after deleting them.  This is always done
+if the server supports UID EXPUNGE, but it's not done by default on
+servers that doesn't support that command.
 
 @item nnimap-streaming
 Virtually all @acronym{IMAP} server support fast streaming of data.
diff --git a/etc/NEWS b/etc/NEWS
index e5ee40c..ca66df6 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -81,16 +81,6 @@ for '--daemon'.
 * Changes in Emacs 26.1
 
 +++
-** The Gnus user variable 'nnimap-expunge' supports three new values:
-'never' for never expunging messages, 'immediately' for immediately
-expunging deleted messages, and 'on-exit' to expunge deleted articles
-when exiting the group's summary buffer. Setting 'nnimap-expunge' to
-'nil' or 't' is still supported but not recommended, since it may
-result in Gnus expunging all messages that have been flagged as
-deleted by any IMAP client (rather than just those that have been
-deleted by Gnus).
-
-+++
 ** The new function 'mapbacktrace' applies a function to all frames of
 the current stack trace.
 
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 931ec31..700e86a 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -92,21 +92,10 @@ Uses the same syntax as `nnmail-split-methods'.")
 Possible choices are nil (use default methods), `anonymous',
 `login', `plain' and `cram-md5'.")
 
-(defvoo nnimap-expunge 'on-exit
-  "When to expunge deleted messages.
-If 'never, deleted articles are marked with the IMAP \\Delete
-flag but not automatically expunged. If 'immediately, deleted
-articles are immediately expunged (this requires the server to
-support the UID EXPUNGE command). If 'on-exit, deleted articles
-are flagged, and all flagged articles are expunged when the
-group is closed.
-
-For backwards compatibility, this variable may also be set to t
-or nil. If the server supports UID EXPUNGE, both t and nil are
-equivalent to 'immediately. If the server does not support UID
-EXPUNGE nil is equivalent to 'never, while t will immediately
-expunge ALL articles that are currently flagged as deleted
-(i.e., potentially not only the article that was just deleted).")
+(defvoo nnimap-expunge t
+  "If non-nil, expunge articles after deleting them.
+This is always done if the server supports UID EXPUNGE, but it's
+not done by default on servers that doesn't support that command.")
 
 (defvoo nnimap-streaming t
   "If non-nil, try to use streaming commands with IMAP servers.
@@ -921,12 +910,8 @@ textual parts.")
              articles)))
     (nreverse articles)))
 
-(deffoo nnimap-close-group (_group &optional server)
-  (when (eq nnimap-expunge 'on-exit)
-    (nnoo-change-server 'nnimap server nil)
-    (with-current-buffer (nnimap-buffer)
-      (nnimap-wait-for-response
-       (nnimap-send-command "EXPUNGE")))))
+(deffoo nnimap-close-group (_group &optional _server)
+  t)
 
 (deffoo nnimap-request-move-article (article group server accept-form
                                             &optional _last
@@ -975,7 +960,8 @@ textual parts.")
     articles)
    ((and force
         (eq nnmail-expiry-target 'delete))
-    (nnimap-delete-article (gnus-compress-sequence articles))
+    (unless (nnimap-delete-article (gnus-compress-sequence articles))
+      (nnheader-message 7 "Article marked for deletion, but not expunged."))
     nil)
    (t
     (let ((deletable-articles
@@ -1098,38 +1084,21 @@ If LIMIT, first try to limit the search to the N last 
articles."
             (when (and limit number-of-article)
               (nnimap-find-article-by-message-id group server 
message-id))))))))
 
-(defun nnimap-delete-article (articles &optional sync)
-  "Delete ARTICLES.
-
-If sync is non-nil, wait for server response."
+(defun nnimap-delete-article (articles)
   (with-current-buffer (nnimap-buffer)
     (nnimap-command "UID STORE %s +FLAGS.SILENT (\\Deleted)"
                    (nnimap-article-ranges articles))
-    (let ((sequence
     (cond
-            ((eq nnimap-expunge 'immediately)
-             (if (nnimap-capability "UIDPLUS")
+     ((nnimap-capability "UIDPLUS")
       (nnimap-command "UID EXPUNGE %s"
                      (nnimap-article-ranges articles))
-      (nnheader-message
-       3 (concat "nnimap-expunge set to 'immediately, but "
-                 "server doesn't support UIDPLUS"))))
-
-            ((memq nnimap-expunge '(on-exit never)) nil)
-
-            ((nnimap-capability "UIDPLUS")
-             (nnimap-command "UID EXPUNGE %s"
-                             (nnimap-article-ranges articles)))
-
+      t)
      (nnimap-expunge
-             (nnimap-command "EXPUNGE"))
-
-            (t
-             (nnheader-message
-              7 "Article marked for deletion, but not expunged.")))))
-
-      (if (and sync sequence)
-          (nnimap-wait-for-response sequence)))))
+      (nnimap-command "EXPUNGE")
+      t)
+     (t (gnus-message 7 (concat "nnimap: nnimap-expunge is not set and the "
+                                "server doesn't support UIDPLUS, so we won't "
+                                "delete this article now"))))))
 
 (deffoo nnimap-request-scan (&optional group server)
   (when group
@@ -2149,9 +2118,27 @@ Return the server's response to the SELECT or EXAMINE 
command."
              (nnimap-wait-for-response (caar sequences))
              ;; And then mark the successful copy actions as deleted,
              ;; and possibly expunge them.
-              (nnimap-delete-article
-               (nnimap-parse-copied-articles sequences) t))
-            (nnimap-delete-article junk-articles t)))))))
+             (nnimap-mark-and-expunge-incoming
+              (nnimap-parse-copied-articles sequences)))
+            (nnimap-mark-and-expunge-incoming junk-articles)))))))
+
+(defun nnimap-mark-and-expunge-incoming (range)
+  (when range
+    (setq range (nnimap-article-ranges range))
+    (erase-buffer)
+    (let ((sequence
+          (nnimap-send-command
+           "UID STORE %s +FLAGS.SILENT (\\Deleted)" range)))
+      (cond
+       ;; If the server supports it, we now delete the message we have
+       ;; just copied over.
+       ((nnimap-capability "UIDPLUS")
+       (setq sequence (nnimap-send-command "UID EXPUNGE %s" range)))
+       ;; If it doesn't support UID EXPUNGE, then we only expunge if the
+       ;; user has configured it.
+       (nnimap-expunge
+       (setq sequence (nnimap-send-command "EXPUNGE"))))
+      (nnimap-wait-for-response sequence))))
 
 (defun nnimap-parse-copied-articles (sequences)
   (let (sequence copied range)



reply via email to

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