Update copyright year to 2016
[gnus] / lisp / nnfolder.el
index 0245ff8..ee60e3e 100644 (file)
@@ -1,6 +1,6 @@
 ;;; nnfolder.el --- mail folder access for Gnus
 
-;; Copyright (C) 1995-2012 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2016 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;;      ShengHuo Zhu <zsh@cs.rochester.edu> (adding NOV)
 
 ;;; Code:
 
-;; For Emacs <22.2 and XEmacs.
-(eval-and-compile
-  (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
-
 (require 'nnheader)
 (require 'message)
 (require 'nnmail)
@@ -1004,6 +1000,28 @@ deleted.  Point is left where the deleted region was."
            (nnfolder-save-nov))
          (current-buffer))))))
 
+(defun nnfolder-recursive-directory-files (dir prefix)
+  (let ((files nil))
+    (dolist (file (directory-files dir))
+      (cond
+       ((or (file-symlink-p (expand-file-name file dir))
+           (member file '("." "..")))
+       ;; Ignore
+       )
+       ((file-directory-p (expand-file-name file dir))
+       (setq files (nconc (nnfolder-recursive-directory-files
+                           (expand-file-name file dir)
+                           (if prefix
+                               (concat prefix "." (directory-file-name file))
+                             (file-name-nondirectory file)))
+                          files)))
+       ((file-regular-p (expand-file-name file dir))
+       (push (if prefix
+                 (concat prefix "." file)
+               file)
+             files))))
+    files))
+
 ;;;###autoload
 (defun nnfolder-generate-active-file ()
   "Look for mbox folders in the nnfolder directory and make them into groups.
@@ -1020,10 +1038,13 @@ This command does not work if you use short group names."
       (when (not (message-mail-file-mbox-p file))
        (ignore-errors
          (delete-file file)))))
-    (dolist (file (directory-files nnfolder-directory))
+    (dolist (file (if nnmail-use-long-file-names
+                     (directory-files nnfolder-directory)
+                   (nnfolder-recursive-directory-files
+                    nnfolder-directory nil)))
       (when (and (not (backup-file-name-p file))
                 (message-mail-file-mbox-p
-                 (nnheader-concat nnfolder-directory file)))
+                 (nnfolder-group-pathname file)))
        (let ((oldgroup (assoc file nnfolder-group-alist)))
          (if oldgroup
              (nnheader-message 5 "Refreshing group %s..." file)
@@ -1059,16 +1080,17 @@ This command does not work if you use short group names."
 
 (defun nnfolder-save-buffer ()
   "Save the buffer."
-  (when (buffer-modified-p)
-    (run-hooks 'nnfolder-save-buffer-hook)
-    (gnus-make-directory (file-name-directory (buffer-file-name)))
-    (let ((coding-system-for-write
-          (or nnfolder-file-coding-system-for-write
-              nnfolder-file-coding-system)))
-      (set (make-local-variable 'copyright-update) nil)
-      (save-buffer)))
-  (unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
-    (nnfolder-save-nov)))
+  (let ((delete-old-versions t))
+    (when (buffer-modified-p)
+      (run-hooks 'nnfolder-save-buffer-hook)
+      (gnus-make-directory (file-name-directory (buffer-file-name)))
+      (let ((coding-system-for-write
+            (or nnfolder-file-coding-system-for-write
+                nnfolder-file-coding-system)))
+       (set (make-local-variable 'copyright-update) nil)
+       (save-buffer)))
+    (unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
+      (nnfolder-save-nov))))
 
 (defun nnfolder-save-active (group-alist active-file)
   (let ((nnmail-active-file-coding-system