epg [Sat, 25 Mar 2006 01:39:55 +0000 (01:39 +0000)]
(get_highest_msgnum): Fix minor bug, returning one less than it should
be on the first call for a folder. This was only noticeable in -n mode
because store_message loops to find a fresh number.
epg [Thu, 19 Jan 2006 19:48:46 +0000 (19:48 +0000)]
(mark): Since new.c only uses the lists from .mh_sequences, it doesn't
parse them, simply appending here really hurts. Bite the bullet and
properly merge new messages into the existing .mh_sequences message
lists (i.e. 1-39 becomes 1-40).
epg [Wed, 18 Jan 2006 21:25:45 +0000 (21:25 +0000)]
This 35k message folder at work is getting burdensome. minc was
reading that entire folder everytime it stored a message there! Twice
because mark(1) does it too. The first is my fault, the second mh's.
I still haven't gone through mh to get rid of unnecessary readdirs, so
work around the problem here.
(get_highest_msgnum): Only read a directory once, saving the highest
message number and incrementing it on each call.
(mark): New function to add a message to a sequence.
(store_message): Use mark instead of running mark(1).
epg [Tue, 22 Nov 2005 00:59:40 +0000 (00:59 +0000)]
(find_mh_folder): Require $regexp to be a regular expression object
(qr//) instead of a string. Now it's up to the user whether it
matches sensitive to case or not, or uses any other options.
epg [Sat, 19 Nov 2005 00:46:01 +0000 (00:46 +0000)]
Even easier .folders sorting; now all you have to do is provide a list
of regexps, and the sorting will be according to their order. You can
still define your own sorter, if necessary.
Get rid of dryrun.log: in -n mode, don't log at all. I don't think
anyone ever actually used the dryrun log, and if we get rid of it,
then minc -n becomes a better mdfrm.
(find_mh_folder): Don't know why, but the MAGIC_TO crap wasn't doing
the same kind of match as the other filters, and you couldn't use
parts of the match in the folder name. Fix.
($SCAN_P_FOLDER, $SCAN_P_MESSAGE, $SCAN_P_FROM): New configurable
globals, the proportion each field should take in the scan lines.
(filter_mail): Use these new globals instead of instead of hard-coded
defaults, and move the loading of .minc before the use of these
globals so the user can change them.
(filter_mail): Need to print a \r before printing the status line,
as nothing is printed for spam messages, so these would just stack
up on the same line with two or more spams in a row.
(filter_mail): Stop popping items from header lists and just read the
last header value. Also get rid of control characters in the subject
(stupid spam!).
Pull in COLUMNS environment variable and default it to 80.
(filter_mail): Instead of printing which folders have been added to,
print one line per saved non-spam message: its folder, message number,
and from and subject headers. Use COLUMNS and hard-coded proportions
to determine how much of the line to allocate to each field printed.
(find_mh_folder): Take %headers as arguments, don't call get_headers
or log_headers here.
(filter_mail): .mincfilters, mincspam, and .minchooks are now just one
file, .minc. Now we don't magically know the name of some
spam_start_hook, spam_stop_hook, spam_check, and post_store_hook, but
instead run all the hooks in the @start_hooks, @stop_hooks,
@filter_hooks, and @post_store_hooks lists. Call get_headers and
log_headers here so we can pass them to the hooks.
epg [Thu, 25 Nov 2004 05:09:31 +0000 (05:09 +0000)]
(filter_mail): Support a post_store_hook, in case someone wants to do
post-processing for a message. This is getting out of hand; all these
hooks should be folded into a single .mincrc or something...
(getfiles): Just return readdir results, don't strip . and .. and
don't return absolute paths. We walk the file list enough times
already, there's no need to walk it for this.
(filter_mail): Skip . and .. in the @msglist.
(MAIN): Instead of passing getfiles $MAILDIR/new, chdir there and pass '.'.
New option -p. Using this option causes minc to print the filename
for each message before checking it for spam, which is useful for
debugging the spam filter.
My trick for defining is_spam() was broken and i never noticed because
i wasn't doing use strict in .mincspam; fix it with eval and also add
spam_start_hook and spam_stop_hook.
(kill_spam): Now call spam_start_hook(), save the list it returns, and
pass it to each spam_check() call (formerly known as is_spam()). Also
pass it to spam_stop_hook() after processing all spam. This allows
the spam processor to maintain state, and do other things like talk to
a co-process.
epg [Tue, 11 Mar 2003 01:13:18 +0000 (01:13 +0000)]
(find_mh_folder): DOH! The // match operation must be done
case-insensitive. I think it used to be and i accidentally changed it
when i changed the substitution operation to matching.
epg [Sun, 19 Jan 2003 03:11:14 +0000 (03:11 +0000)]
mdeliver/current/mdeliver.c:
(deliver): In rev 1582 i changed this from using rename(2) to
the recommended link(2) + unlink(2). But in minc i was using
open(2) + rename(2) instead, which is just as safe as link +
unlink but with one advantage. So switch to that model.
minc/current/minc:
(store_message): Document the open + rename procedure and
explain why it is used instead of link + unlink.
epg [Mon, 30 Dec 2002 02:25:03 +0000 (02:25 +0000)]
(logincoming): Move part of log_headers here.
(log_headers): Pass the array of contents for each header to
logincoming rather than indexing here. logincoming now checks for an
empty array (i.e. message missing this header) before trying to index
into it (it used to bomb).