From: Reiner Steib <4.uce.03.r.s@nurfuerspam.de>
Subject: Re: Limiting number of Incomingxxxx mails
Date: Wed, 19 Feb 2003 22:12:05 +0100 [thread overview]
Message-ID: <v9el64ht5m.fsf@marauder.physik.uni-ulm.de> (raw)
In-Reply-To: <ulm0i27hs.fsf_-_@hschmi22.userfqdn.rz-online.de>
[-- Attachment #1: Type: text/plain, Size: 1499 bytes --]
On Fri, Feb 14 2003, Frank Schmitt wrote:
> We have been talking in gnu.emacs.gnus about possibilities of reducing
> the amount of diskspace the Incoming* files need. Perhaps there's
> somebody who thinks our ideas are cool and wants to implement them?
>
> Reiner Steib <4.uce.03.r.s@nurfuerspam.de> writes:
[...]
>> (defcustom mail-source-delete-incoming nil
>> "*If t, delete incoming files after handling.
>> If a positive number, delete files, older than number days. If set to the
>> symbol `compress', compress the files. If it is a negative number, compress
>> the files and delete compressed files older than that number of
>> days. If nil, never delete."
I have write `mail-source-delete-old-incoming' but the function *needs
review* and testing. I haven't worked with elisp times and
file-attributes before, so my approach might be too complicated or
complete nonsense. ;-) *Feedback welcome*!
With the attached patch, old (>= 3 days) incoming files will be
deleted (after confirmation!). You may also test the function without
applying the patch[1]:
,----[ C-h f mail-source-delete-old-incoming RET ]
| mail-source-delete-old-incoming is an interactive Lisp function in `...'.
| (mail-source-delete-old-incoming &optional AGE CONFIRM)
|
| Remove incoming files older than AGE days.
| If CONFIRM is non-nil, ask for confirmation before removing a file.
`----
`M-: (mail-source-delete-old-incoming 7 t) RET'
If you set gnus-verbose to 10 you'll get lots of debugging output.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: mail-source.delete-old-incoming.01.patch --]
[-- Type: text/x-patch, Size: 3844 bytes --]
--- mail-source.el.~6.29.~ Mon Feb 17 11:37:23 2003
+++ mail-source.el Wed Feb 19 20:45:23 2003
@@ -262,8 +262,20 @@
:group 'mail-source
:type 'integer)
-(defcustom mail-source-delete-incoming nil
- "*If non-nil, delete incoming files after handling."
+(defcustom mail-source-delete-incoming 3; nil
+ "*If non-nil, delete incoming files after handling.
+If t, delete immediately, if nil, never delete. If a positive number, delete
+files older than number of days."
+ ;; Note: The removing happens in `mail-source-callback', i.e. no old
+ ;; incoming files will be deleted, unless you receive new mail.
+ ;;
+ ;; You may also set this to `t' and call `mail-source-delete-old-incoming'
+ ;; from a hook or interactively.
+ :group 'mail-source
+ :type 'integer)
+
+(defcustom mail-source-delete-old-incoming-confirm t; nil
+ "*If non-nil, ask for for confirmation before deleting old incoming files."
:group 'mail-source
:type 'boolean)
@@ -506,6 +518,44 @@
(setq newname (make-temp-name newprefix)))
newname))))
+(defun mail-source-delete-old-incoming (&optional age confirm)
+ "Remove incoming files older than AGE days.
+If CONFIRM is non-nil, ask for confirmation before removing a file."
+ (interactive "P")
+ (let ((ddays 30) ;; fallback, if no valid AGE given
+ (high2days (/ 65536.0 60 60 24));; convert high bits to days
+ (low2days (/ 1.0 65536.0)) ;; convert low bits to days
+ diff
+ files ffile bfile filetime fileday currday)
+ (setq diff (if (and (numberp age) (>= age 0))
+ age
+ ddays))
+ ;; (gnus-message 1 "Setting `confirm' to `t' (testing!)") ;; To be removed
+ ;; (setq confirm t) (sit-for 1) ;; To be removed
+ (setq
+ files (directory-files
+ mail-source-directory t
+ (concat mail-source-incoming-file-prefix "*"))
+ currday (* (car (current-time)) high2days)
+ currday (+ currday (* low2days (nth 1 (current-time)))))
+ (gnus-message 8 "diff=`%s', currday=`%s'" diff currday);; To be removed
+ (while files
+ (setq
+ ffile (car files)
+ bfile (gnus-replace-in-string ffile "\\`.*/\\([^/]+\\)\\'" "\\1")
+ filetime (nth 5 (file-attributes ffile))
+ fileday (* (car filetime) high2days)
+ fileday (+ fileday (* low2days (nth 1 filetime)))
+ files (cdr files))
+ (gnus-message 9 "File `%s', fileday=`%s', `-c f'=`%s'";; To be removed
+ bfile fileday (- currday fileday));; To be removed
+ (when (and (> (- currday fileday) diff)
+ (gnus-message 8 "File `%s' is older than %s day(s)"
+ bfile diff)
+ (or (not confirm)
+ (y-or-n-p (concat "Remove file `" bfile "'? "))))
+ (delete-file ffile)))))
+
(defun mail-source-callback (callback info)
"Call CALLBACK on the mail file, and then remove the mail file.
Pass INFO on to CALLBACK."
@@ -519,7 +569,7 @@
(funcall callback mail-source-crash-box info)
(when (file-exists-p mail-source-crash-box)
;; Delete or move the incoming mail out of the way.
- (if mail-source-delete-incoming
+ (if (eq mail-source-delete-incoming t)
(delete-file mail-source-crash-box)
(let ((incoming
(mail-source-make-complex-temp-name
@@ -528,8 +578,14 @@
mail-source-directory))))
(unless (file-exists-p (file-name-directory incoming))
(make-directory (file-name-directory incoming) t))
- (rename-file mail-source-crash-box incoming t)))))))
-
+ (rename-file mail-source-crash-box incoming t)
+ ;; remove old incoming files?
+ (when (and (numberp mail-source-delete-incoming)
+ (>= mail-source-delete-incoming 0))
+ (mail-source-delete-old-incoming
+ mail-source-delete-incoming
+ mail-source-delete-old-incoming-confirm))))))))
+
(defun mail-source-movemail (from to)
"Move FROM to TO using movemail."
(if (not (file-writable-p to))
[-- Attachment #3: Type: text/plain, Size: 236 bytes --]
Bye, Reiner.
[1] Extract `(defun mail-source-delete-old-incoming ...)' from the
patch, remove the leading "+"-sign and eval it.
--
,,,
(o o)
---ooO-(_)-Ooo--- PGP key available via WWW http://rsteib.home.pages.de/
next parent reply other threads:[~2003-02-19 21:12 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <xeq3r8abqkpm.fsf@desh.cisco.com>
[not found] ` <v91y2b0zkh.fsf@marauder.physik.uni-ulm.de>
[not found] ` <u7kc37yaj.fsf@hschmi22.userfqdn.rz-online.de>
[not found] ` <v9ptpurj9a.fsf@marauder.physik.uni-ulm.de>
[not found] ` <ulm0i27hs.fsf_-_@hschmi22.userfqdn.rz-online.de>
2003-02-19 21:12 ` Reiner Steib [this message]
2003-02-22 22:05 ` Lars Magne Ingebrigtsen
2003-02-24 20:25 ` Reiner Steib
2003-03-03 16:00 ` Ted Zlatanov
2003-03-03 16:56 ` Kai Großjohann
2003-03-04 5:23 ` Sriram Karra
2003-03-03 17:07 ` Kai Großjohann
2003-03-03 18:30 ` Reiner Steib
2003-03-03 20:23 ` Kai Großjohann
2003-03-03 21:46 ` Jesper Harder
2003-03-30 2:07 ` Lars Magne Ingebrigtsen
2003-03-03 17:14 ` Kai Großjohann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=v9el64ht5m.fsf@marauder.physik.uni-ulm.de \
--to=4.uce.03.r.s@nurfuerspam.de \
--cc=reiner.steib@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).