Mercurial > emacs
comparison lisp/gnus/nnml.el @ 110425:cd99c4421df9
* lisp/gnus/nnml.el (nnml-files): Add prefix to dynamic var `files'.
(nnml-generate-nov-databases-directory, nnml-generate-active-info):
Update var name.
(nnml-generate-nov-file): Use dolist.
(nnml-directory-articles, nnml-current-group-article-to-file-alist):
Use with-current-buffer.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 19 Sep 2010 11:16:28 +0200 |
parents | 93e093c035a0 |
children | b7b7e970d807 |
comparison
equal
deleted
inserted
replaced
110424:03a492f2d1ce | 110425:cd99c4421df9 |
---|---|
876 ;; Recurse down the directories. | 876 ;; Recurse down the directories. |
877 (nnml-generate-nov-databases-directory nnml-directory nil t) | 877 (nnml-generate-nov-databases-directory nnml-directory nil t) |
878 ;; Save the active file. | 878 ;; Save the active file. |
879 (nnmail-save-active nnml-group-alist nnml-active-file)) | 879 (nnmail-save-active nnml-group-alist nnml-active-file)) |
880 | 880 |
881 (defvar nnml-files) | |
881 (defun nnml-generate-nov-databases-directory (dir &optional seen no-active) | 882 (defun nnml-generate-nov-databases-directory (dir &optional seen no-active) |
882 "Regenerate the NOV database in DIR. | 883 "Regenerate the NOV database in DIR. |
883 | 884 |
884 Unless no-active is non-nil, update the active file too." | 885 Unless no-active is non-nil, update the active file too." |
885 (interactive (list (let ((file-name-coding-system | 886 (interactive (list (let ((file-name-coding-system |
895 (dolist (dir (directory-files dir t nil t)) | 896 (dolist (dir (directory-files dir t nil t)) |
896 (when (and (not (string-match "^\\." (file-name-nondirectory dir))) | 897 (when (and (not (string-match "^\\." (file-name-nondirectory dir))) |
897 (file-directory-p dir)) | 898 (file-directory-p dir)) |
898 (nnml-generate-nov-databases-directory dir seen))) | 899 (nnml-generate-nov-databases-directory dir seen))) |
899 ;; Do this directory. | 900 ;; Do this directory. |
900 (let ((files (sort (nnheader-article-to-file-alist dir) | 901 (let ((nnml-files (sort (nnheader-article-to-file-alist dir) |
901 'car-less-than-car))) | 902 'car-less-than-car))) |
902 (if (not files) | 903 (if (not nnml-files) |
903 (let* ((group (nnheader-file-to-group | 904 (let* ((group (nnheader-file-to-group |
904 (directory-file-name dir) nnml-directory)) | 905 (directory-file-name dir) nnml-directory)) |
905 (info (cadr (assoc group nnml-group-alist)))) | 906 (info (cadr (assoc group nnml-group-alist)))) |
906 (when info | 907 (when info |
907 (setcar info (1+ (cdr info))))) | 908 (setcar info (1+ (cdr info))))) |
908 (funcall nnml-generate-active-function dir) | 909 (funcall nnml-generate-active-function dir) |
909 ;; Generate the nov file. | 910 ;; Generate the nov file. |
910 (nnml-generate-nov-file dir files) | 911 (nnml-generate-nov-file dir nnml-files) |
911 (unless no-active | 912 (unless no-active |
912 (nnmail-save-active nnml-group-alist nnml-active-file))))))) | 913 (nnmail-save-active nnml-group-alist nnml-active-file))))))) |
913 | 914 |
914 (defvar files) | |
915 (defun nnml-generate-active-info (dir) | 915 (defun nnml-generate-active-info (dir) |
916 ;; Update the active info for this group. | 916 ;; Update the active info for this group. |
917 (let ((group (directory-file-name dir)) | 917 (let ((group (directory-file-name dir)) |
918 entry last) | 918 entry last) |
919 (setq group (nnheader-file-to-group (nnml-encoded-group-name group) | 919 (setq group (nnheader-file-to-group (nnml-encoded-group-name group) |
920 nnml-directory) | 920 nnml-directory) |
921 entry (assoc group nnml-group-alist) | 921 entry (assoc group nnml-group-alist) |
922 last (or (caadr entry) 0) | 922 last (or (caadr entry) 0) |
923 nnml-group-alist (delq entry nnml-group-alist)) | 923 nnml-group-alist (delq entry nnml-group-alist)) |
924 (push (list group | 924 (push (list group |
925 (cons (or (caar files) (1+ last)) | 925 (cons (or (caar nnml-files) (1+ last)) |
926 (max last | 926 (max last |
927 (or (caar (last files)) | 927 (or (caar (last nnml-files)) |
928 0)))) | 928 0)))) |
929 nnml-group-alist))) | 929 nnml-group-alist))) |
930 | 930 |
931 (defun nnml-generate-nov-file (dir files) | 931 (defun nnml-generate-nov-file (dir files) |
932 (let* ((dir (file-name-as-directory dir)) | 932 (let* ((dir (file-name-as-directory dir)) |
939 (erase-buffer) | 939 (erase-buffer) |
940 (set-buffer nntp-server-buffer) | 940 (set-buffer nntp-server-buffer) |
941 ;; Delete the old NOV file. | 941 ;; Delete the old NOV file. |
942 (when (file-exists-p nov) | 942 (when (file-exists-p nov) |
943 (funcall nnmail-delete-file-function nov)) | 943 (funcall nnmail-delete-file-function nov)) |
944 (while files | 944 (dolist (file files) |
945 (unless (file-directory-p (setq file (concat dir (cdar files)))) | 945 (unless (file-directory-p (setq file (concat dir (cdr file)))) |
946 (erase-buffer) | 946 (erase-buffer) |
947 (nnheader-insert-file-contents file) | 947 (nnheader-insert-file-contents file) |
948 (narrow-to-region | 948 (narrow-to-region |
949 (goto-char (point-min)) | 949 (goto-char (point-min)) |
950 (progn | 950 (progn |
951 (re-search-forward "\n\r?\n" nil t) | 951 (re-search-forward "\n\r?\n" nil t) |
952 (setq chars (- (point-max) (point))) | 952 (setq chars (- (point-max) (point))) |
953 (max (point-min) (1- (point))))) | 953 (max (point-min) (1- (point))))) |
954 (unless (zerop (buffer-size)) | 954 (unless (zerop (buffer-size)) |
955 (goto-char (point-min)) | 955 (goto-char (point-min)) |
956 (setq headers (nnml-parse-head chars (caar files))) | 956 (setq headers (nnml-parse-head chars (car file))) |
957 (with-current-buffer nov-buffer | 957 (with-current-buffer nov-buffer |
958 (goto-char (point-max)) | 958 (goto-char (point-max)) |
959 (nnheader-insert-nov headers))) | 959 (nnheader-insert-nov headers))) |
960 (widen)) | 960 (widen))) |
961 (setq files (cdr files))) | |
962 (with-current-buffer nov-buffer | 961 (with-current-buffer nov-buffer |
963 (nnmail-write-region (point-min) (point-max) nov nil 'nomesg) | 962 (nnmail-write-region (point-min) (point-max) nov nil 'nomesg) |
964 (kill-buffer (current-buffer)))))) | 963 (kill-buffer (current-buffer)))))) |
965 | 964 |
966 (defun nnml-nov-delete-article (group article) | 965 (defun nnml-nov-delete-article (group article) |
993 (expand-file-name nnml-nov-file-name dir)))) | 992 (expand-file-name nnml-nov-file-name dir)))) |
994 (nnheader-directory-articles dir) | 993 (nnheader-directory-articles dir) |
995 ;; build list from .overview if available | 994 ;; build list from .overview if available |
996 ;; We would use nnml-open-nov, except that nnml-nov-buffer-alist is | 995 ;; We would use nnml-open-nov, except that nnml-nov-buffer-alist is |
997 ;; defvoo'd, and we might get called when it hasn't been swapped in. | 996 ;; defvoo'd, and we might get called when it hasn't been swapped in. |
998 (save-excursion | 997 (with-current-buffer (nnml-get-nov-buffer nnml-current-group) |
999 (let ((list nil) | 998 (let ((list nil) |
1000 art | 999 art) |
1001 (buffer (nnml-get-nov-buffer nnml-current-group))) | |
1002 (set-buffer buffer) | |
1003 (goto-char (point-min)) | 1000 (goto-char (point-min)) |
1004 (while (not (eobp)) | 1001 (while (not (eobp)) |
1005 (setq art (read (current-buffer))) | 1002 (setq art (read (current-buffer))) |
1006 (push art list) | 1003 (push art list) |
1007 (forward-line 1)) | 1004 (forward-line 1)) |
1016 (not (file-exists-p | 1013 (not (file-exists-p |
1017 (expand-file-name nnml-nov-file-name | 1014 (expand-file-name nnml-nov-file-name |
1018 nnml-current-directory)))) | 1015 nnml-current-directory)))) |
1019 (nnheader-article-to-file-alist nnml-current-directory) | 1016 (nnheader-article-to-file-alist nnml-current-directory) |
1020 ;; build list from .overview if available | 1017 ;; build list from .overview if available |
1021 (save-excursion | 1018 (with-current-buffer (nnml-get-nov-buffer nnml-current-group) |
1022 (let ((alist nil) | 1019 (let ((alist nil) |
1023 (buffer (nnml-get-nov-buffer nnml-current-group)) | |
1024 art) | 1020 art) |
1025 (set-buffer buffer) | |
1026 (goto-char (point-min)) | 1021 (goto-char (point-min)) |
1027 (while (not (eobp)) | 1022 (while (not (eobp)) |
1028 (setq art (read (current-buffer))) | 1023 (setq art (read (current-buffer))) |
1029 ;; assume file name is unadorned (ie. not compressed etc) | 1024 ;; assume file name is unadorned (ie. not compressed etc) |
1030 (push (cons art (int-to-string art)) alist) | 1025 (push (cons art (int-to-string art)) alist) |