emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r102677: Merge changes made in Gnus t


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r102677: Merge changes made in Gnus trunk.
Date: Thu, 16 Dec 2010 22:22:28 +0000
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 102677
author: Gnus developers
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Thu 2010-12-16 22:22:28 +0000
message:
  Merge changes made in Gnus trunk.
  
  nnimap.el (nnimap-wait-for-response): Always look (at least) at the previous 
line.
  nnimap.el (nnimap-quirk): New function.
   (nnimap-retrieve-group-data-early): Use it.
   (nnimap-quirks): New alist.
  gnus.texi (Foreign Groups): Added clarification of foreign groups.
  gnus-sum.el (gnus-summary-push-marks-to-backend): Fix the logic for copying 
read-ness to the backends.
  gnus-group.el (gnus-group-kill-group): Notify the backend that the group has 
been killed.
   (gnus-group-yank-group): Ditto.
  gnus-start.el (gnus-subscribe-newsgroup): Notify the backend.
  nnir.el: Improve customizations.
  gnus.texi (Archived Messages): Removed outdated comment and text.
  nnfolder.el (nnfolder-save-all-buffers): Refactor out into its own function.
   (nnfolder-request-expire-articles): Save all the buffers after doing expiry.
  nnmail.el (nnmail-expiry-target-group): Revert the "all articles are the last 
article", since that led to serious performance regressions when expiring nnml 
groups.
  gnus-html.el (gnus-html-schedule-image-fetching): Make sure the HTML fetching 
stops when Gnus exits.
  gnus-srvr.el: Avoid passing nil regexp argument to delete-matching-lines.
  auth-source.el (auth-source-gpg-encrypt-to): New variable to set the list of 
recipient keys, or use symmetric encryption if not a list.
   (auth-source-create): Use it to make `epa-file-encrypt-to' local for an EPA 
override, replacing the call to `netrc-store-data'.
modified:
  doc/misc/ChangeLog
  doc/misc/gnus.texi
  lisp/gnus/ChangeLog
  lisp/gnus/auth-source.el
  lisp/gnus/gnus-group.el
  lisp/gnus/gnus-html.el
  lisp/gnus/gnus-int.el
  lisp/gnus/gnus-srvr.el
  lisp/gnus/gnus-start.el
  lisp/gnus/gnus-sum.el
  lisp/gnus/nnfolder.el
  lisp/gnus/nnimap.el
  lisp/gnus/nnir.el
  lisp/gnus/nnmail.el
=== modified file 'doc/misc/ChangeLog'
--- a/doc/misc/ChangeLog        2010-12-15 22:24:36 +0000
+++ b/doc/misc/ChangeLog        2010-12-16 22:22:28 +0000
@@ -1,3 +1,11 @@
+2010-12-16  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus.texi (Archived Messages): Remove outdated text.
+
+2010-12-16  Teodor Zlatanov  <address@hidden>
+
+       * gnus.texi (Foreign Groups): Added clarification of foreign groups.
+
 2010-12-15  Andrew Cohen  <address@hidden>
 
        * gnus.texi (The hyrex Engine): Say that this engine as obsolete.

=== modified file 'doc/misc/gnus.texi'
--- a/doc/misc/gnus.texi        2010-12-15 22:24:36 +0000
+++ b/doc/misc/gnus.texi        2010-12-16 22:22:28 +0000
@@ -2512,6 +2512,15 @@
 @section Foreign Groups
 @cindex foreign groups
 
+If you recall how to subscribe to servers (@pxref{Finding the News})
+you will remember that @code{gnus-secondary-select-methods} and
address@hidden let you write a definition in Emacs Lisp of
+what servers you want to see when you start up.  The alternate
+approach is to use foreign servers and groups.  ``Foreign'' here means
+they are not coming from the select methods.  All foreign server
+configuration and subscriptions are stored only in the
address@hidden/.newsrc.eld} file.
+
 Below are some group mode commands for making and editing general foreign
 groups, as well as commands to ease the creation of a few
 special-purpose groups.  All these commands insert the newly created
@@ -12611,9 +12620,6 @@
           (concat "mail." (format-time-string "%Y-%m")))))
 @end lisp
 
address@hidden (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll 
have to
address@hidden use a different value for @code{gnus-message-archive-group} 
there.)
-
 Now, when you send a message off, it will be stored in the appropriate
 group.  (If you want to disable storing for just one particular message,
 you can just remove the @code{Gcc} header that has been inserted.)  The
@@ -12625,11 +12631,6 @@
 address@hidden, or whatever.  New messages will
 continue to be stored in the old (now empty) group.
 
-That's the default method of archiving sent messages.  Gnus offers a
-different way for the people who don't like the default method.  In that
-case you should set @code{gnus-message-archive-group} to @code{nil};
-this will disable archiving.
-
 @table @code
 @item gnus-gcc-mark-as-read
 @vindex gnus-gcc-mark-as-read

=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2010-12-16 00:55:04 +0000
+++ b/lisp/gnus/ChangeLog       2010-12-16 22:22:28 +0000
@@ -1,8 +1,65 @@
+2010-12-16  Daiki Ueno  <address@hidden>
+
+       * auth-source.el (auth-source-gpg-encrypt-to): New variable to set the
+       list of recipient keys, or use symmetric encryption if not a list.
+       (auth-source-create): Use it to make `epa-file-encrypt-to' local for an
+       EPA override, replacing the call to `netrc-store-data'.
+
+2010-12-16  Dan Davison  <address@hidden>  (tiny change)
+
+       * gnus-srvr.el: Avoid passing nil regexp argument to
+       delete-matching-lines.
+
+2010-12-16  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus-html.el (gnus-html-schedule-image-fetching): Make sure the HTML
+       fetching stops when Gnus exits.
+
+       * nnfolder.el (nnfolder-save-all-buffers): Refactor out into its own
+       function.
+       (nnfolder-request-expire-articles): Save all the buffers after doing
+       expiry.
+
+       * nnmail.el (nnmail-expiry-target-group): Revert the "all articles are
+       the last article", since that led to serious performance regressions
+       when expiring nnml groups.
+
+2010-12-16  Andrew Cohen  <address@hidden>
+
+       * nnir.el: Improve customizations.
+
+2010-12-16  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus-start.el (gnus-subscribe-newsgroup): Notify the backend.
+
+       * gnus-group.el (gnus-group-kill-group): Notify the backend that the
+       group has been killed.
+       (gnus-group-yank-group): Ditto.
+
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Ditto.
+
+       * nnimap.el (nnimap-request-update-group-status): New function.
+
+       * gnus-int.el (gnus-request-update-group-status): New interface
+       function.
+
+       * gnus-sum.el (gnus-summary-push-marks-to-backend): Fix the logic for
+       copying read-ness to the backends.
+
+       * nnimap.el (nnimap-quirk): New function.
+       (nnimap-retrieve-group-data-early): Use it.
+       (nnimap-quirks): New alist.
+
 2010-12-16  Katsumi Yamaoka  <address@hidden>
 
        * shr.el (shr-insert): Set shr-start after deleting trailing space;
        don't delete it within indentation.
 
+2010-12-16  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * nnimap.el (nnimap-wait-for-response): Always look (at least) at the
+       previous line.
+
 2010-12-15  Lars Magne Ingebrigtsen  <address@hidden>
 
        * nnimap.el (nnimap-retrieve-group-data-early): Fix the syntax of the

=== modified file 'lisp/gnus/auth-source.el'
--- a/lisp/gnus/auth-source.el  2010-10-10 22:48:40 +0000
+++ b/lisp/gnus/auth-source.el  2010-12-16 22:22:28 +0000
@@ -159,6 +159,15 @@
                                                      (const :tag "Any" t)
                                                      (string :tag "Specific 
user name"))))))))
 
+(defcustom auth-source-gpg-encrypt-to t
+  "List of recipient keys that `authinfo.gpg' encrypted to.
+If the value is not a list, symmetric encryption will be used."
+  :group 'auth-source
+  :version "23.2" ;; No Gnus
+  :type '(choice (const :tag "Symmetric encryption" t)
+                (repeat :tag "Recipient public keys"
+                        (string :tag "Recipient public key"))))
+
 ;; temp for debugging
 ;; (unintern 'auth-source-protocols)
 ;; (unintern 'auth-sources)
@@ -352,9 +361,28 @@
       ;; netrc interface.
       (when (y-or-n-p (format "Do you want to save this password in %s? "
                               source))
-        (netrc-store-data source host prot
-                          (or user (cdr (assoc "login" result)))
-                          (cdr (assoc "password" result))))))
+       ;; the code below is almost same as `netrc-store-data' except
+       ;; the `epa-file-encrypt-to' hack (see bug#7487).
+       (with-temp-buffer
+         (when (file-exists-p source)
+           (insert-file-contents source))
+         (when auth-source-gpg-encrypt-to
+           ;; making `epa-file-encrypt-to' local to this buffer lets
+           ;; epa-file skip the key selection query (see the
+           ;; `local-variable-p' check in `epa-file-write-region').
+           (unless (local-variable-p 'epa-file-encrypt-to)
+             (make-local-variable 'epa-file-encrypt-to))
+           (if (listp auth-source-gpg-encrypt-to)
+               (setq epa-file-encrypt-to auth-source-gpg-encrypt-to)))
+         (goto-char (point-max))
+         (unless (bolp)
+           (insert "\n"))
+         (insert (format "machine %s login %s password %s port %s\n"
+                         host
+                         (or user (cdr (assoc "login" result)))
+                         (cdr (assoc "password" result))
+                         prot))
+         (write-region (point-min) (point-max) source nil 'silent)))))
     (if (consp mode)
         (mapcar #'cdr result)
       (cdar result))))

=== modified file 'lisp/gnus/gnus-group.el'
--- a/lisp/gnus/gnus-group.el   2010-11-08 01:38:47 +0000
+++ b/lisp/gnus/gnus-group.el   2010-12-16 22:22:28 +0000
@@ -3781,6 +3781,7 @@
                  gnus-list-of-killed-groups))
          (gnus-group-change-level
           (if entry entry group) gnus-level-killed (if entry nil level))
+         (gnus-request-update-group-status group 'unsubscribe)
          (message "Killed group %s" (gnus-group-decoded-name group)))
       ;; If there are lots and lots of groups to be killed, we use
       ;; this thing instead.
@@ -3803,7 +3804,8 @@
          (setq gnus-zombie-list (delete group gnus-zombie-list))))
        ;; There may be more than one instance displayed.
        (while (gnus-group-goto-group group)
-         (gnus-delete-line)))
+         (gnus-delete-line))
+       (gnus-request-update-group-status group 'unsubscribe))
       (gnus-make-hashtable-from-newsrc-alist))
 
     (gnus-group-position-point)
@@ -3831,6 +3833,7 @@
        (and prev (gnus-group-entry prev))
        t)
       (gnus-group-insert-group-line-info group)
+      (gnus-request-update-group-status group 'subscribe)
       (gnus-undo-register
        `(when (gnus-group-goto-group ,group)
           (gnus-group-kill-group 1))))

=== modified file 'lisp/gnus/gnus-html.el'
--- a/lisp/gnus/gnus-html.el    2010-12-05 22:17:34 +0000
+++ b/lisp/gnus/gnus-html.el    2010-12-16 22:22:28 +0000
@@ -395,7 +395,7 @@
             4)
       (setq args (nconc args (list t))))
     (ignore-errors
-      (apply #'url-retrieve args))))
+      (push (apply #'url-retrieve args) gnus-buffers))))
 
 (defun gnus-html-image-fetched (status buffer image)
   "Callback function called when image has been fetched."

=== modified file 'lisp/gnus/gnus-int.el'
--- a/lisp/gnus/gnus-int.el     2010-12-06 22:16:10 +0000
+++ b/lisp/gnus/gnus-int.el     2010-12-16 22:22:28 +0000
@@ -473,6 +473,18 @@
       (funcall (gnus-get-function gnus-command-method 'request-type)
               (gnus-group-real-name group) article))))
 
+(defun gnus-request-update-group-status (group status)
+  "Change the status of a group.
+Valid statuses include `subscribe' and `unsubscribe'."
+  (let ((gnus-command-method (gnus-find-method-for-group group)))
+    (if (not (gnus-check-backend-function
+             'request-update-group-status (car gnus-command-method)))
+       nil
+      (funcall
+       (gnus-get-function gnus-command-method 'request-update-group-status)
+       (gnus-group-real-name group) status
+       (nth 1 gnus-command-method)))))
+
 (defun gnus-request-set-mark (group action)
   "Set marks on articles in the back end."
   (let ((gnus-command-method (gnus-find-method-for-group group)))

=== modified file 'lisp/gnus/gnus-srvr.el'
--- a/lisp/gnus/gnus-srvr.el    2010-11-21 22:46:16 +0000
+++ b/lisp/gnus/gnus-srvr.el    2010-12-16 22:22:28 +0000
@@ -766,7 +766,8 @@
       (with-current-buffer nntp-server-buffer
        (let ((cur (current-buffer)))
          (goto-char (point-min))
-         (unless (string= gnus-ignored-newsgroups "")
+         (unless (or (null gnus-ignored-newsgroups)
+                     (string= gnus-ignored-newsgroups ""))
            (delete-matching-lines gnus-ignored-newsgroups))
          ;; We treat NNTP as a special case to avoid problems with
          ;; garbage group names like `"foo' that appear in some badly
@@ -992,7 +993,8 @@
                ;; mechanism for new group subscription.
                (gnus-call-subscribe-functions
                 gnus-browse-subscribe-newsgroup-method
-                group)))
+                group)
+               (gnus-request-update-group-status group 'subscribe)))
            (delete-char 1)
            (insert (let ((lvl (gnus-group-level group)))
                      (cond

=== modified file 'lisp/gnus/gnus-start.el'
--- a/lisp/gnus/gnus-start.el   2010-12-13 22:29:12 +0000
+++ b/lisp/gnus/gnus-start.el   2010-12-16 22:22:28 +0000
@@ -645,6 +645,7 @@
     (gnus-group-change-level
      newsgroup gnus-level-default-subscribed
      gnus-level-killed (gnus-group-entry (or next "dummy.group")))
+    (gnus-request-update-group-status newsgroup 'subscribe)
     (gnus-message 5 "Subscribe newsgroup: %s" newsgroup)
     (run-hook-with-args 'gnus-subscribe-newsgroup-hooks newsgroup)
     t))

=== modified file 'lisp/gnus/gnus-sum.el'
--- a/lisp/gnus/gnus-sum.el     2010-12-13 04:22:39 +0000
+++ b/lisp/gnus/gnus-sum.el     2010-12-16 22:22:28 +0000
@@ -9958,7 +9958,7 @@
 (defun gnus-summary-push-marks-to-backend (article)
   (let ((set nil)
        (marks gnus-article-mark-lists))
-    (when (memq article gnus-newsgroup-unreads)
+    (unless (memq article gnus-newsgroup-unreads)
       (push 'read set))
     (while marks
       (when (and (eq (gnus-article-mark-to-type (cdar marks)) 'list)

=== modified file 'lisp/gnus/nnfolder.el'
--- a/lisp/gnus/nnfolder.el     2010-11-26 02:11:40 +0000
+++ b/lisp/gnus/nnfolder.el     2010-12-16 22:22:28 +0000
@@ -322,20 +322,20 @@
   (when nnfolder-get-new-mail
     (nnfolder-possibly-change-group group server)
     (nnmail-get-new-mail
-     'nnfolder
-     (lambda ()
-       (let ((bufs nnfolder-buffer-alist))
-        (save-excursion
-          (while bufs
-            (if (not (gnus-buffer-live-p (nth 1 (car bufs))))
-                (setq nnfolder-buffer-alist
-                      (delq (car bufs) nnfolder-buffer-alist))
-              (set-buffer (nth 1 (car bufs)))
-              (nnfolder-save-buffer)
-              (kill-buffer (current-buffer)))
-            (setq bufs (cdr bufs))))))
-     nnfolder-directory
-     group)))
+     'nnfolder 'nnfolder-save-all-buffers
+     nnfolder-directory group)))
+
+(defun nnfolder-save-all-buffers ()
+  (let ((bufs nnfolder-buffer-alist))
+    (save-excursion
+      (while bufs
+       (if (not (gnus-buffer-live-p (nth 1 (car bufs))))
+           (setq nnfolder-buffer-alist
+                 (delq (car bufs) nnfolder-buffer-alist))
+         (set-buffer (nth 1 (car bufs)))
+         (nnfolder-save-buffer)
+         (kill-buffer (current-buffer)))
+       (setq bufs (cdr bufs))))))
 
 ;; Don't close the buffer if we're not shutting down the server.  This way,
 ;; we can keep the buffer in the group buffer cache, and not have to grovel
@@ -488,7 +488,8 @@
       (nnfolder-save-buffer)
       (nnfolder-adjust-min-active newsgroup)
       (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
-      (gnus-sorted-difference articles (nreverse deleted-articles)))))
+      (gnus-sorted-difference articles (nreverse deleted-articles)))
+    (nnfolder-save-all-buffers)))
 
 (deffoo nnfolder-request-move-article (article group server accept-form
                                               &optional last move-is-internal)

=== modified file 'lisp/gnus/nnimap.el'
--- a/lisp/gnus/nnimap.el       2010-12-15 22:24:36 +0000
+++ b/lisp/gnus/nnimap.el       2010-12-16 22:22:28 +0000
@@ -139,6 +139,9 @@
     (download "gnus-download")
     (forward "gnus-forward")))
 
+(defvar nnimap-quirks
+  '(("QRESYNC" "Zimbra" "QRESYNC ")))
+
 (defun nnimap-buffer ()
   (nnimap-find-process-buffer nntp-server-buffer))
 
@@ -897,6 +900,16 @@
        (push flag flags)))
     flags))
 
+(deffoo nnimap-request-update-group-status (group status &optional server)
+  (when (nnimap-possibly-change-group nil server)
+    (let ((command (assoc
+                   status
+                   '((subscribe "SUBSCRIBE")
+                     (unsubscribe "UNSUBSCRIBE")))))
+      (when command
+       (with-current-buffer (nnimap-buffer)
+         (nnimap-command "%s %S" (cadr command) (utf7-encode group t)))))))
+
 (deffoo nnimap-request-set-mark (group actions &optional server)
   (when (nnimap-possibly-change-group group server)
     (let (sequence)
@@ -1080,8 +1093,9 @@
                   uidvalidity
                   modseq)
              (push
-              (list (nnimap-send-command "EXAMINE %S (QRESYNC (%s %s))"
+              (list (nnimap-send-command "EXAMINE %S (%s (%s %s))"
                                          (utf7-encode group t)
+                                         (nnimap-quirk "QRESYNC")
                                          uidvalidity modseq)
                     'qresync
                     nil group 'qresync)
@@ -1107,6 +1121,15 @@
                    sequences))))
        sequences))))
 
+(defun nnimap-quirk (command)
+  (let ((quirk (assoc command nnimap-quirks)))
+    ;; If this server is of a type that matches a quirk, then return
+    ;; the "quirked" command instead of the proper one.
+    (if (or (null quirk)
+           (not (string-match (nth 1 quirk) (nnimap-greeting nnimap-object))))
+       command
+      (nth 2 quirk))))
+
 (deffoo nnimap-finish-retrieve-group-infos (server infos sequences)
   (when (and sequences
             (nnimap-possibly-change-group nil server))
@@ -1541,7 +1564,11 @@
                      (not (re-search-backward
                            (format "^%d .*\n" sequence)
                            (if nnimap-streaming
-                               (max (point-min) (- (point) 500))
+                               (max (point-min)
+                                    (- (point) 500)
+                                    (save-excursion
+                                      (forward-line -1)
+                                      (point)))
                              (point-min))
                            t)))
            (when messagep

=== modified file 'lisp/gnus/nnir.el'
--- a/lisp/gnus/nnir.el 2010-12-14 12:52:30 +0000
+++ b/lisp/gnus/nnir.el 2010-12-16 22:22:28 +0000
@@ -305,13 +305,6 @@
   "Search groups in Gnus with assorted seach engines."
   :group 'gnus)
 
-(defcustom nnir-method-default-engines
-  '((nnimap . imap)
-    (nntp . gmane))
-  "*Alist of default search engines keyed by server method."
-  :type '(alist)
-  :group 'nnir)
-
 (defcustom nnir-ignored-newsgroups ""
   "*A regexp to match newsgroups in the active file that should
   be skipped when searching."
@@ -329,7 +322,7 @@
 %g    Article original short group name (string)
 
 If nil this will use `gnus-summary-line-format'."
-  :type '(regexp)
+  :type '(string)
   :group 'nnir)
 
 (defcustom nnir-retrieve-headers-override-function nil
@@ -347,7 +340,8 @@
   "*The default IMAP search key for an nnir search. Must be one of
   the keys in `nnir-imap-search-arguments'. To use raw imap queries
   by default set this to \"Imap\"."
-  :type '(string)
+  :type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
+                          nnir-imap-search-arguments))
   :group 'nnir)
 
 (defcustom nnir-swish++-configuration-file
@@ -546,6 +540,18 @@
 
 Add an entry here when adding a new search engine.")
 
+(defcustom nnir-method-default-engines
+  '((nnimap . imap)
+    (nntp . gmane))
+  "*Alist of default search engines keyed by server method."
+  :type `(repeat (cons (choice (const nnimap) (const nttp) (const nnspool)
+                              (const nneething) (const nndir) (const nnmbox)
+                              (const nnml) (const nnmh) (const nndraft)
+                              (const nnfolder) (const nnmaildir))
+                      (choice
+                       ,@(mapcar (lambda (elem) (list 'const (car elem)))
+                                 nnir-engines))))
+  :group 'nnir)
 
 ;; Gnus glue.
 

=== modified file 'lisp/gnus/nnmail.el'
--- a/lisp/gnus/nnmail.el       2010-11-26 02:37:23 +0000
+++ b/lisp/gnus/nnmail.el       2010-12-16 22:22:28 +0000
@@ -1915,7 +1915,7 @@
     (unless (eq target 'delete)
       (when (or (gnus-request-group target)
                (gnus-request-create-group target))
-       (let ((group-art (gnus-request-accept-article target nil t t)))
+       (let ((group-art (gnus-request-accept-article target nil nil t)))
          (when (and (consp group-art)
                     (cdr group-art))
            (gnus-group-mark-article-read target (cdr group-art))))))))


reply via email to

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