emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r105314: Merge changes made in Gnus trunk.
Date: Sun, 24 Jul 2011 00:19:29 +0000
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 105314
author: Andrew Cohen <address@hidden>
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Sun 2011-07-24 00:19:29 +0000
message:
  Merge changes made in Gnus trunk.
  
  nnir.el (nnir-search-thread): New function to make an nnir group based on a 
thread query.
  gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use of nnir 
in thread referral.
   (gnus-summary-refer-thread): Use it.
  nnimap.el (nnimap-request-thread): Use it.
modified:
  lisp/gnus/ChangeLog
  lisp/gnus/gnus-sum.el
  lisp/gnus/nnimap.el
  lisp/gnus/nnir.el
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2011-07-20 22:48:00 +0000
+++ b/lisp/gnus/ChangeLog       2011-07-24 00:19:29 +0000
@@ -1,3 +1,14 @@
+2011-07-23  Andrew Cohen  <address@hidden>
+
+       * nnir.el (nnir-search-thread): New function to make an nnir group
+       based on a thread query.
+
+       * gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use
+       of nnir in thread referral.
+       (gnus-summary-refer-thread): Use it.
+
+       * nnimap.el (nnimap-request-thread): Use it.
+
 2011-07-20  Lars Magne Ingebrigtsen  <address@hidden>
 
        * shr.el (shr-tag-comment): Ignore HTML comments.

=== modified file 'lisp/gnus/gnus-sum.el'
--- a/lisp/gnus/gnus-sum.el     2011-07-20 14:19:52 +0000
+++ b/lisp/gnus/gnus-sum.el     2011-07-24 00:19:29 +0000
@@ -118,6 +118,13 @@
   :type '(choice number
                 (sexp :menu-tag "other" t)))
 
+(defcustom gnus-refer-thread-use-nnir nil
+  "*Use nnir to search an entire server when referring threads. A
+nil value will only search for thread-related articles in the
+current group."
+  :group 'gnus-thread
+  :type 'boolean)
+
 (defcustom gnus-summary-make-false-root 'adopt
   "*nil means that Gnus won't gather loose threads.
 If the root of a thread has expired or been read in a previous
@@ -8972,11 +8979,16 @@
     result))
 
 (defun gnus-summary-refer-thread (&optional limit)
-  "Fetch all articles in the current thread.
-If no backend-specific 'request-thread function is available
-fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil
-fetch what's specified by the `gnus-refer-thread-limit'
-variable."
+  "Fetch all articles in the current thread. For backends that
+know how to search for threads (currently only 'nnimap) a
+non-numeric prefix arg will use nnir to search the entire
+server; without a prefix arg only the current group is
+searched. If the variable `gnus-refer-thread-use-nnir' is
+non-nil the prefix arg has the reverse meaning. If no
+backend-specific 'request-thread function is available fetch
+LIMIT (the numerical prefix) old headers. If LIMIT is
+non-numeric or nil fetch the number specified by the
+`gnus-refer-thread-limit' variable."
   (interactive "P")
   (gnus-warp-to-article)
   (let* ((header (gnus-summary-article-header))
@@ -8984,13 +8996,16 @@
         (gnus-inhibit-demon t)
         (gnus-summary-ignore-duplicates t)
         (gnus-read-all-available-headers t)
-        (limit (if limit (prefix-numeric-value limit)
-                 gnus-refer-thread-limit))
+        (gnus-refer-thread-use-nnir
+         (if (and (not (null limit)) (listp limit))
+             (not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir))
         (new-headers
          (if (gnus-check-backend-function
               'request-thread gnus-newsgroup-name)
              (gnus-request-thread header gnus-newsgroup-name)
-           (let* ((last (if (numberp limit)
+           (let* ((limit (if (numberp limit) (prefix-numeric-value limit)
+                           gnus-refer-thread-limit))
+                  (last (if (numberp limit)
                             (min (+ (mail-header-number header)
                                     limit)
                                  gnus-newsgroup-highest)
@@ -9005,17 +9020,19 @@
                       (regexp-opt (append refs (list id subject)))))))
              (gnus-fetch-headers (list last) (if (numberp limit)
                                                  (* 2 limit) limit) t)))))
-    (dolist (header new-headers)
-      (when (member (mail-header-number header) gnus-newsgroup-unselected)
-       (push (mail-header-number header) gnus-newsgroup-unreads)
-       (setq gnus-newsgroup-unselected
-             (delete (mail-header-number header) gnus-newsgroup-unselected))))
-    (setq gnus-newsgroup-headers
-         (gnus-delete-duplicate-headers
-          (gnus-merge
-           'list gnus-newsgroup-headers new-headers
-           'gnus-article-sort-by-number)))
-    (gnus-summary-limit-include-thread id)))
+    (when (listp new-headers)
+      (dolist (header new-headers)
+       (when (member (mail-header-number header) gnus-newsgroup-unselected)
+          (push (mail-header-number header) gnus-newsgroup-unreads)
+          (setq gnus-newsgroup-unselected
+                (delete (mail-header-number header)
+                       gnus-newsgroup-unselected))))
+      (setq gnus-newsgroup-headers
+            (gnus-delete-duplicate-headers
+             (gnus-merge
+              'list gnus-newsgroup-headers new-headers
+              'gnus-article-sort-by-number)))
+      (gnus-summary-limit-include-thread id))))
 
 (defun gnus-summary-refer-article (message-id)
   "Fetch an article specified by MESSAGE-ID."

=== modified file 'lisp/gnus/nnimap.el'
--- a/lisp/gnus/nnimap.el       2011-07-20 14:19:52 +0000
+++ b/lisp/gnus/nnimap.el       2011-07-24 00:19:29 +0000
@@ -1566,15 +1566,17 @@
                  (articles &optional limit force-new dependencies))
 
 (deffoo nnimap-request-thread (header &optional group server)
-  (when (nnimap-possibly-change-group group server)
-    (let* ((cmd (nnimap-make-thread-query header))
-          (result (with-current-buffer (nnimap-buffer)
-                    (nnimap-command  "UID SEARCH %s" cmd))))
-      (when result
-       (gnus-fetch-headers
-        (and (car result) (delete 0 (mapcar #'string-to-number
-                                            (cdr (assoc "SEARCH" (cdr 
result))))))
-        nil t)))))
+  (if gnus-refer-thread-use-nnir 
+      (nnir-search-thread header)
+    (when (nnimap-possibly-change-group group server)
+      (let* ((cmd (nnimap-make-thread-query header))
+             (result (with-current-buffer (nnimap-buffer)
+                       (nnimap-command  "UID SEARCH %s" cmd))))
+        (when result
+          (gnus-fetch-headers
+           (and (car result) (delete 0 (mapcar #'string-to-number
+                                               (cdr (assoc "SEARCH" (cdr 
result))))))
+           nil t))))))
 
 (defun nnimap-possibly-change-group (group server)
   (let ((open-result t))

=== modified file 'lisp/gnus/nnir.el'
--- a/lisp/gnus/nnir.el 2011-07-20 15:24:16 +0000
+++ b/lisp/gnus/nnir.el 2011-07-24 00:19:29 +0000
@@ -289,6 +289,7 @@
   (autoload 'nnimap-buffer "nnimap")
   (autoload 'nnimap-command "nnimap")
   (autoload 'nnimap-possibly-change-group "nnimap")
+  (autoload 'nnimap-make-thread-query "nnimap")
   (autoload 'gnus-registry-action "gnus-registry")
   (defvar gnus-registry-install))
 
@@ -1649,6 +1650,16 @@
     (nnir-open-server server)))
 
 
+(defun nnir-search-thread (header)
+  "Make an nnir group based on the thread containing the article header"
+  (let ((parm (list
+              (cons 'query
+                    (nnimap-make-thread-query header))
+              (cons 'criteria "")
+              (cons 'server (gnus-method-to-server
+                             (gnus-find-method-for-group
+                              gnus-newsgroup-name))))))
+    (gnus-group-make-nnir-group nil parm)))
 
 ;; unused?
 (defun nnir-artlist-groups (artlist)


reply via email to

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