X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-move.el;h=801f891b8a0bd85b4ec645f65596fcb1c3662f4e;hb=4b34fded7033b14cbfcf3dc0db672c72acde7acb;hp=9e669cccab44015df8ecd8eca577033fd2aca093;hpb=aa88205ebb3cd4ade3696b2faf1d72a687cffa49;p=gnus diff --git a/lisp/gnus-move.el b/lisp/gnus-move.el index 9e669ccca..801f891b8 100644 --- a/lisp/gnus-move.el +++ b/lisp/gnus-move.el @@ -1,5 +1,5 @@ ;;; gnus-move.el --- commands for moving Gnus from one server to another -;; Copyright (C) 1996 Free Software Foundation, Inc. +;; Copyright (C) 1996,97 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -25,11 +25,12 @@ ;;; Code: -(require 'gnus-load) +(eval-when-compile (require 'cl)) + +(require 'gnus) (require 'gnus-start) (require 'gnus-int) (require 'gnus-range) -(require 'gnus) ;;; ;;; Moving by comparing Message-ID's. @@ -41,7 +42,7 @@ Update the .newsrc.eld file to reflect the change of nntp server." (interactive (list gnus-select-method (gnus-read-method "Move to method: "))) - + ;; First start Gnus. (let ((gnus-activate-level 0) (nnmail-spool-file nil)) @@ -60,14 +61,19 @@ Update the .newsrc.eld file to reflect the change of nntp server." "Move group INFO from FROM-SERVER to TO-SERVER." (let ((group (gnus-info-group info)) to-active hashtb type mark marks - to-article to-reads to-marks article) + to-article to-reads to-marks article + act-articles) (gnus-message 7 "Translating %s..." group) (when (gnus-request-group group nil to-server) (setq to-active (gnus-parse-active) - hashtb (make-vector 1023 0)) + hashtb (gnus-make-hashtable 1024) + act-articles (gnus-uncompress-range to-active)) ;; Fetch the headers from the `to-server'. - (when (setq type (gnus-retrieve-headers - (car to-active) (cdr to-active))) + (when (and to-active + act-articles + (setq type (gnus-retrieve-headers + act-articles + group to-server))) ;; Convert HEAD headers. I don't care. (when (eq type 'headers) (nnvirtual-convert-headers)) @@ -75,9 +81,8 @@ Update the .newsrc.eld file to reflect the change of nntp server." (set-buffer nntp-server-buffer) (goto-char (point-min)) (while (looking-at - "^[0-9]+\t[^\t]*\t[^\t]*\t[^\t]*\t\\([^\t]*\\)\t" - nil t) - (gnus-sethash + "^[0-9]+\t[^\t]*\t[^\t]*\t[^\t]*\t\\([^\t]*\\)\t") + (gnus-sethash (buffer-substring (match-beginning 1) (match-end 1)) (read (current-buffer)) hashtb) @@ -86,8 +91,9 @@ Update the .newsrc.eld file to reflect the change of nntp server." (when (and (gnus-request-group group nil from-server) (gnus-active group) (setq type (gnus-retrieve-headers - (car (gnus-active group)) - (cdr (gnus-active group))))) + (gnus-uncompress-range + (gnus-active group)) + group from-server))) ;; Make it easier to map marks. (let ((mark-lists (gnus-info-marks info)) ms type m) @@ -106,26 +112,25 @@ Update the .newsrc.eld file to reflect the change of nntp server." (set-buffer nntp-server-buffer) (goto-char (point-min)) (while (looking-at - "^[0-9]+\t[^\t]*\t[^\t]*\t[^\t]*\t\\([^\t]*\\)\t" - nil t) - (setq to-article - (gnus-gethash - (buffer-substring (match-beginning 1) (match-end 1)) - hashtb)) - ;; Add this article to the list of read articles. - (push to-article to-reads) - ;; See if there are any marks and then add them. - (when (setq mark (assq (read (current-buffer)) marks)) - (setq marks (delq mark marks)) - (setcar mark to-article) - (push mark to-marks)) - (forward-line 1)) + "^[0-9]+\t[^\t]*\t[^\t]*\t[^\t]*\t\\([^\t]*\\)\t") + (when (setq to-article + (gnus-gethash + (buffer-substring (match-beginning 1) (match-end 1)) + hashtb)) + ;; Add this article to the list of read articles. + (push to-article to-reads) + ;; See if there are any marks and then add them. + (when (setq mark (assq (read (current-buffer)) marks)) + (setq marks (delq mark marks)) + (setcar mark to-article) + (push mark to-marks)) + (forward-line 1))) ;; Now we know what the read articles are and what the ;; article marks are. We transform the information ;; into the Gnus info format. - (setq to-reads - (gnus-range-add - (gnus-compress-sequence (sort to-reads '<) t) + (setq to-reads + (gnus-range-add + (gnus-compress-sequence (and to-reads (sort to-reads '<)) t) (cons 1 (1- (car to-active))))) (gnus-info-set-read info to-reads) ;; Do the marks. I'm sure y'all understand what's @@ -142,9 +147,10 @@ Update the .newsrc.eld file to reflect the change of nntp server." (cons article (cdr a))))) (setq a lists) (while a - (setcdr (car a) (gnus-compress-sequence (sort (cdar a) '<))) + (setcdr (car a) (gnus-compress-sequence + (and (cdar a) (sort (cdar a) '<)))) (pop a)) - (gnus-info-set-marks info lists))))) + (gnus-info-set-marks info lists t))))) (gnus-message 7 "Translating %s...done" group))) (defun gnus-group-move-group-to-server (info from-server to-server) @@ -152,7 +158,7 @@ Update the .newsrc.eld file to reflect the change of nntp server." (interactive (let ((info (gnus-get-info (gnus-group-group-name)))) (list info (gnus-find-method-for-group (gnus-info-group info)) - (gnus-read-method (format "Move group %s to method: " + (gnus-read-method (format "Move group %s to method: " (gnus-info-group info)))))) (save-excursion (gnus-move-group-to-server info from-server to-server) @@ -160,7 +166,7 @@ Update the .newsrc.eld file to reflect the change of nntp server." (gnus-info-set-method info to-server t) ;; We also have to change the name of the group and stuff. (let* ((group (gnus-info-group info)) - (new-name (gnus-group-prefixed-name + (new-name (gnus-group-prefixed-name (gnus-group-real-name group) to-server))) (gnus-info-set-group info new-name) (gnus-sethash new-name (gnus-gethash group gnus-newsrc-hashtb)