Gnus development mailing list
 help / color / mirror / Atom feed
From: "Bjørn Mork" <bjorn@mork.no>
To: ding@gnus.org
Cc: "Bjørn Mork" <bjorn@mork.no>
Subject: [PATCH] nnimap.el (nnimap-process-expiry-targets): avoid downloading articles unless necessary
Date: Thu,  2 Dec 2010 13:03:03 +0100	[thread overview]
Message-ID: <1291291383-18946-1-git-send-email-bjorn@mork.no> (raw)
In-Reply-To: <874od8fjcc.fsf@nemi.mork.no>

Using UID COPY to move the articles will always be faster.  And downloading articles
which we already know are to be deleted, seems a bit unnecessary...

Signed-off-by: Bjørn Mork <bjorn@mork.no>
---

Finally got around to porting this from my previous implementation.
Let me just repeat that I'm really lisp illiterate and add that I
don't know much about Gnus internals either.  So this code will
most likely look a bit strange to anyone familiar with either or
both.  Please fix as you find appropriate, or use as it is.

This Works For Me(tm).


 lisp/nnimap.el |   52 ++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/lisp/nnimap.el b/lisp/nnimap.el
index a53f9ac..4b4793d 100644
--- a/lisp/nnimap.el
+++ b/lisp/nnimap.el
@@ -793,22 +793,42 @@ textual parts.")
 
 (defun nnimap-process-expiry-targets (articles group server)
   (let ((deleted-articles nil))
-    (dolist (article articles)
-      (let ((target nnmail-expiry-target))
-	(with-temp-buffer
-          (mm-disable-multibyte)
-	  (when (nnimap-request-article article group server (current-buffer))
-	    (nnheader-message 7 "Expiring article %s:%d" group article)
-	    (when (functionp target)
-	      (setq target (funcall target group)))
-	    (when (and target
-		       (not (eq target 'delete)))
-	      (if (or (gnus-request-group target t)
-		      (gnus-request-create-group target))
-		  (nnmail-expiry-target-group target group)
-		(setq target nil)))
-	    (when target
-	      (push article deleted-articles))))))
+    (cond
+     ;; shortcut further processing if we're going to delete the articles
+     ((eq nnmail-expiry-target 'delete)
+      (setq deleted-articles articles)
+      t)
+     ;; or just move them to another folder on the same IMAP server
+     ((and (not (functionp nnmail-expiry-target))
+	   (gnus-server-equal (gnus-group-method nnmail-expiry-target)
+			      (gnus-server-to-method
+			       (format "nnimap:%s" server))))
+      (and (nnimap-possibly-change-group group server)
+	   (with-current-buffer (nnimap-buffer)
+	     (nnheader-message 7 "Expiring articles from %s: %s" group articles)
+	     (nnimap-command
+	      "UID COPY %s %S"
+	      (nnimap-article-ranges (gnus-compress-sequence articles))
+	      (utf7-encode (gnus-group-real-name nnmail-expiry-target) t))
+	     (setq deleted-articles articles)))
+      t)
+     (t
+      (dolist (article articles)
+	(let ((target nnmail-expiry-target))
+	  (with-temp-buffer
+	    (mm-disable-multibyte)
+	    (when (nnimap-request-article article group server (current-buffer))
+	      (nnheader-message 7 "Expiring article %s:%d" group article)
+	      (when (functionp target)
+		(setq target (funcall target group)))
+	      (when (and target
+			 (not (eq target 'delete)))
+		(if (or (gnus-request-group target t)
+			(gnus-request-create-group target))
+		    (nnmail-expiry-target-group target group)
+		  (setq target nil)))
+	      (when target
+		(push article deleted-articles))))))))
     ;; Change back to the current group again.
     (nnimap-possibly-change-group group server)
     (setq deleted-articles (nreverse deleted-articles))
-- 
1.7.2.3




  reply	other threads:[~2010-12-02 12:03 UTC|newest]

Thread overview: 219+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-05  1:04 That newfangled IMAP thing Lars Magne Ingebrigtsen
2010-09-05  1:12 ` Steinar Bang
2010-09-05 11:20   ` Lars Magne Ingebrigtsen
2010-09-05 11:44     ` Sebastian Krause
2010-09-05 12:00     ` Frank Schmitt
2010-09-05 13:16     ` Steinar Bang
2010-09-05 19:58     ` James Cloos
2010-09-06  7:17     ` Bjørn Mork
2010-09-07 14:15     ` Wes Hardaker
2010-09-07 14:52       ` Richard Riley
2010-09-07 17:56         ` Wes Hardaker
2010-12-05 12:33         ` Matthias Andree
2010-09-05  1:56 ` Daniel Pittman
2010-09-05  2:17 ` Tibor Simko
2010-09-05  2:27 ` Ted Zlatanov
2010-09-05  7:18   ` Steinar Bang
2010-09-05 11:00     ` Bjørn Mork
2010-09-05 13:31       ` Steinar Bang
2010-09-05 11:23   ` Lars Magne Ingebrigtsen
2010-09-05 13:22     ` Steinar Bang
2010-09-05 13:25       ` Lars Magne Ingebrigtsen
2010-09-05 13:43         ` Steinar Bang
2010-09-05 17:26     ` Bjørn Mork
2010-09-05 17:30       ` Bjørn Mork
2010-09-06  9:05         ` Bjørn Mork
2010-09-06 15:02           ` Lars Magne Ingebrigtsen
2010-09-06 15:28             ` Lars Magne Ingebrigtsen
2010-09-09 14:54               ` Ted Zlatanov
2010-09-09 14:58                 ` Lars Magne Ingebrigtsen
2010-09-09 15:07                   ` Ted Zlatanov
2010-09-05 17:30       ` Lars Magne Ingebrigtsen
2010-09-05 10:55 ` Bjørn Mork
2010-09-05 13:28   ` Lars Magne Ingebrigtsen
2010-09-05 17:07     ` Bjørn Mork
2010-09-05 17:10       ` Lars Magne Ingebrigtsen
2010-09-05 17:30         ` Memnon Anon
2010-09-06  7:41           ` Bjørn Mork
2010-09-27 23:16     ` Bjørn Mork
2010-09-29 14:43       ` Lars Magne Ingebrigtsen
2010-09-29 19:19         ` Bjørn Mork
2010-12-02 12:03           ` Bjørn Mork [this message]
2010-12-02 12:17             ` expiry taking "forever" in both cpu time and real time when the IMAP UID is high Bjørn Mork
2010-12-02 12:59               ` Daniel Pittman
2010-12-02 13:28                 ` Bjørn Mork
2010-12-05 12:21                   ` Lars Magne Ingebrigtsen
2011-11-06 22:24                     ` slow nnimap expiry (dubious patch) John Magorrian
2012-01-03 22:53                       ` Lars Magne Ingebrigtsen
2012-02-13  8:56                         ` Bjørn Mork
2012-02-13 19:27                           ` Lars Ingebrigtsen
2012-02-13 20:48                             ` Bjørn Mork
2012-02-26 14:27                         ` Dave Abrahams
2012-03-10  0:51                           ` Lars Magne Ingebrigtsen
2012-03-10 18:16                             ` Dave Abrahams
2012-03-10 19:57                               ` John Magorrian
2010-12-05 12:16             ` [PATCH] nnimap.el (nnimap-process-expiry-targets): avoid downloading articles unless necessary Lars Magne Ingebrigtsen
2010-09-05 12:43 ` That newfangled IMAP thing Greg Troxel
2010-09-05 12:56   ` Lars Magne Ingebrigtsen
2010-09-05 13:16     ` Lars Magne Ingebrigtsen
2010-09-05 13:38       ` Lars Magne Ingebrigtsen
2010-09-05 13:40         ` Lars Magne Ingebrigtsen
2010-09-05 13:46           ` Lars Magne Ingebrigtsen
2010-09-05 14:12             ` Lars Magne Ingebrigtsen
2010-09-05 14:43               ` Lars Magne Ingebrigtsen
2010-09-05 14:49                 ` Steinar Bang
2010-09-05 16:59                 ` Lars Magne Ingebrigtsen
2010-09-05 17:00                   ` Lars Magne Ingebrigtsen
2010-09-05 17:47                   ` Steinar Bang
2010-09-05 17:49                   ` Steinar Bang
2010-09-06 12:50                   ` Ted Zlatanov
2010-09-09 12:55                     ` Steinar Bang
2010-09-09 13:55                       ` Bjørn Mork
2010-09-09 13:59                       ` Lars Magne Ingebrigtsen
2010-09-09 14:26                         ` Daniel Pittman
2010-09-09 17:14                         ` Sebastian Krause
2010-09-10 23:33                           ` Lars Magne Ingebrigtsen
2010-09-10 23:53                             ` Jason L Tibbitts III
2010-09-11  0:02                               ` Lars Magne Ingebrigtsen
2010-09-11  0:16                                 ` Greg Troxel
2010-09-11  0:31                                   ` Lars Magne Ingebrigtsen
2010-09-11  3:42                                     ` Daniel Pittman
2010-09-11 11:07                                       ` Ted Zlatanov
2010-09-11 11:47                                         ` Julien Danjou
2010-09-11 15:44                                           ` Lars Magne Ingebrigtsen
2010-09-11 17:20                                             ` Lars Magne Ingebrigtsen
2010-09-11 17:30                                               ` Julien Danjou
2010-09-11 17:31                                               ` Lars Magne Ingebrigtsen
2010-09-12  8:38                                               ` Daniel Pittman
2010-09-12  9:24                                                 ` Julien Danjou
2010-09-12  9:53                                                   ` Daniel Pittman
2010-09-12 11:12                                                   ` Richard Riley
2010-09-12 13:15                                                 ` Lars Magne Ingebrigtsen
2010-09-12 15:12                                                   ` Lars Magne Ingebrigtsen
2010-09-12 15:40                                                     ` Steinar Bang
2010-09-12 16:03                                                       ` Lars Magne Ingebrigtsen
2010-09-12 16:56                                                         ` Frank Schmitt
2010-09-12 17:03                                                           ` Lars Magne Ingebrigtsen
2010-09-12 17:26                                                             ` Steinar Bang
2010-09-12 17:29                                                               ` Lars Magne Ingebrigtsen
2010-09-12 19:47                                                                 ` Lars Magne Ingebrigtsen
2010-09-12 20:19                                                                   ` Lars Magne Ingebrigtsen
2010-09-13  4:28                                                                     ` Daniel Pittman
2010-09-12 17:24                                                         ` Richard Riley
2010-09-13 10:54                                                     ` Ted Zlatanov
2010-09-13  4:26                                                   ` Daniel Pittman
2010-09-13  9:28                                                     ` Lars Magne Ingebrigtsen
2010-09-13  9:49                                                       ` Steinar Bang
2010-09-13  9:57                                                         ` David Edmondson
2010-09-13 10:20                                                           ` Lars Magne Ingebrigtsen
2010-09-13  9:58                                                         ` Lars Magne Ingebrigtsen
2010-09-13 10:07                                                           ` Julien Danjou
2010-09-13 10:24                                                             ` Steinar Bang
2010-09-13 11:06                                                               ` Lars Magne Ingebrigtsen
2010-09-13 11:54                                                                 ` Daniel Pittman
2010-09-13 12:20                                                                   ` Steinar Bang
2010-09-11 20:52                                             ` Lars Magne Ingebrigtsen
2010-09-12  2:17                                               ` Lars Magne Ingebrigtsen
2010-09-12  8:32                                                 ` Daniel Pittman
2010-09-12 13:08                                                   ` Lars Magne Ingebrigtsen
2010-09-13  4:24                                                     ` Daniel Pittman
2010-09-13 10:51                                                 ` Ted Zlatanov
2010-09-13 11:09                                                   ` Lars Magne Ingebrigtsen
2010-09-13 12:24                                                     ` Ted Zlatanov
2010-09-13 12:58                                                       ` Lars Magne Ingebrigtsen
2010-09-13 14:22                                                         ` Lars Magne Ingebrigtsen
2010-09-13 20:36                                                           ` Lars Magne Ingebrigtsen
2010-09-13 21:43                                                             ` Knut Anders Hatlen
2010-09-13 21:55                                                               ` Lars Magne Ingebrigtsen
2010-09-13 22:12                                                                 ` Knut Anders Hatlen
2010-09-13 22:14                                                                 ` Steinar Bang
2010-09-13 22:54                                                                 ` Dan Christensen
2010-09-14  7:19                                                                   ` Steinar Bang
2010-09-14 15:10                                                                   ` Lars Magne Ingebrigtsen
2010-09-14 15:18                                                                     ` Julien Danjou
2010-09-14 15:29                                                                     ` Steinar Bang
2010-09-14 15:30                                                                     ` Ted Zlatanov
2010-09-14 15:44                                                                       ` Lars Magne Ingebrigtsen
2010-09-14 16:21                                                                         ` Lars Magne Ingebrigtsen
2010-09-14 18:51                                                                           ` Steinar Bang
2010-09-14 19:01                                                                             ` Lars Magne Ingebrigtsen
2010-09-14 19:23                                                                               ` Steinar Bang
2010-09-14 19:26                                                                                 ` Lars Magne Ingebrigtsen
2010-09-14 19:47                                                                                   ` Steinar Bang
2010-09-14 19:57                                                                                     ` Lars Magne Ingebrigtsen
2010-09-14 20:07                                                                                       ` Steinar Bang
2010-09-14 19:19                                                                           ` Ted Zlatanov
2010-09-14 19:24                                                                             ` Lars Magne Ingebrigtsen
2010-09-14 19:35                                                                               ` Ted Zlatanov
2010-09-14 19:40                                                                                 ` Lars Magne Ingebrigtsen
2010-09-14 19:40                                                                               ` Julien Danjou
2010-09-14 19:43                                                                                 ` Lars Magne Ingebrigtsen
2010-09-14 19:46                                                                                 ` Ted Zlatanov
2010-09-15  8:37                                                                                   ` Julien Danjou
2010-09-14 19:26                                                                         ` Ted Zlatanov
2010-09-14 19:28                                                                           ` Lars Magne Ingebrigtsen
2010-09-14 19:44                                                                             ` Ted Zlatanov
2010-09-15 10:24                                                                             ` Steinar Bang
2010-09-14 19:35                                                                           ` Julien Danjou
2010-09-14 19:44                                                                           ` Dan Christensen
2010-09-14 19:50                                                                             ` Ted Zlatanov
2010-09-14 20:07                                                                               ` Lars Magne Ingebrigtsen
2010-09-14 20:23                                                                                 ` Ted Zlatanov
2010-09-14 20:49                                                                                   ` Frank Schmitt
2010-09-15  6:05                                                                                   ` Steinar Bang
2010-09-15  7:33                                                                                     ` Lars Magne Ingebrigtsen
2010-09-13 23:56                                                                 ` Lars Magne Ingebrigtsen
2010-09-14  0:10                                                                   ` Lars Magne Ingebrigtsen
2010-09-14  0:35                                                                     ` Lars Magne Ingebrigtsen
2010-09-14 10:58                                                                 ` Ted Zlatanov
2010-09-12  2:18                                           ` Ted Zlatanov
2010-09-12  2:32                                             ` Lars Magne Ingebrigtsen
2010-09-06 15:23                   ` Dan Christensen
2010-09-06 20:14                     ` Lars Magne Ingebrigtsen
2010-09-06 21:01                       ` Steinar Bang
2010-09-06 21:05                         ` Lars Magne Ingebrigtsen
2010-09-06 21:27                           ` Steinar Bang
2010-09-06 21:29                             ` Lars Magne Ingebrigtsen
2010-09-06 21:39                               ` Steinar Bang
2010-09-07  0:57                         ` Daniel Pittman
2010-09-07  1:41                           ` Lars Magne Ingebrigtsen
2010-09-07  2:49                             ` Daniel Pittman
2010-09-07  6:14                               ` Gijs Hillenius
2010-09-07  7:17                             ` Steinar Bang
2010-09-07 14:57                       ` Bjørn Mork
2010-09-07 17:59                       ` James Cloos
2010-09-07 18:16                         ` Steinar Bang
2010-09-08  8:34                           ` Vegard Vesterheim
2010-09-08  9:06                             ` Steinar Bang
2010-09-08 10:00                               ` Vegard Vesterheim
2010-09-08 10:07                                 ` Julien Danjou
2010-09-08 12:06                                   ` Steinar Bang
2010-09-08 12:18                                     ` Julien Danjou
2010-09-08 14:29                                     ` Vegard Vesterheim
2010-09-08 14:43                                       ` Steinar Bang
2010-09-08 11:50                                 ` Steinar Bang
2010-09-08 21:26                                   ` Wes Hardaker
2010-09-05 15:02               ` Mark Plaksin
2010-09-05 16:01               ` David Engster
2010-09-05 16:06                 ` David Engster
2010-09-05 16:15                 ` Lars Magne Ingebrigtsen
2010-09-05 18:15                   ` Steinar Bang
2010-09-05 18:21                     ` Lars Magne Ingebrigtsen
2010-09-05 19:46                       ` Steinar Bang
2010-09-05 19:58                         ` Lars Magne Ingebrigtsen
2010-09-06 12:57                           ` Ted Zlatanov
2010-09-06 13:01                             ` Lars Magne Ingebrigtsen
2010-09-06 13:12                               ` Ted Zlatanov
2010-09-05 20:04                       ` Julien Danjou
2010-09-05 20:10                         ` Lars Magne Ingebrigtsen
2010-09-05 14:44             ` Tom Rauchenwald
2010-09-06  3:51         ` Daniel Pittman
2010-09-06  8:45         ` Julien Danjou
2010-09-06 13:39           ` Romain Francoise
2010-09-06 14:23             ` Julien Danjou
2010-09-06 21:01               ` Daniel Dehennin
2010-09-06 21:04                 ` Lars Magne Ingebrigtsen
2010-09-06 16:26             ` Gijs Hillenius
2010-09-06 16:40               ` Lars Magne Ingebrigtsen
2010-09-05 13:27     ` Steinar Bang
2010-09-05 17:25     ` Frank Schmitt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1291291383-18946-1-git-send-email-bjorn@mork.no \
    --to=bjorn@mork.no \
    --cc=ding@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).