X-Git-Url: https://git.madduck.net/etc/mailfilter.git/blobdiff_plain/5af333ca3b83425e5cb3aa704b37654d576856c1..02b40396ea029db6cb19c128e1444f19d881bb11:/bin/retrain diff --git a/bin/retrain b/bin/retrain index a95fbc9..784f17e 100755 --- a/bin/retrain +++ b/bin/retrain @@ -1,25 +1,31 @@ #!/bin/sh set -eu -NICE='nice -20' -PROCMAIL="$HOME/.etc/mailfilter/procmail/procmailrc" +NICE='/usr/bin/nice -20' +NICE='' + +RESUBMIT="$NICE $HOME/.etc/mailfilter/bin/resubmit" PAUSETIME=10 HAM=0 SPAM=0 -MAILDIR= +maildir= +files= for i in "$@"; do case "$i" in --ham) HAM=1;; --spam) SPAM=1;; *) - if [ -n "$MAILDIR" ]; then - echo "E: Maildir already specified: $i" >&2 - exit 1 + if [ -f "$i" ] && [ -r "$i" ]; then + files="$files $i" elif [ -d "$i"/cur ] && [ -d "$i"/new ] && [ -d "$i"/tmp ]; then - MAILDIR="$i" + if [ -n "$maildir" ]; then + echo "E: Maildir already specified: $i" >&2 + exit 1 + fi + maildir="$i" else echo "E: unknown argument: $i" >&2 exit 255 @@ -42,23 +48,33 @@ case "$HAM/$SPAM" in 1/0) ARG=--ham;; esac -LOCKFILE="$MAILDIR/.retrain.lock" -trap "rm -f $LOCKFILE" 1 2 3 4 5 6 7 8 10 11 12 13 14 15 -if ! lockfile -0 -r0 -l 3600 "$LOCKFILE" 2>/dev/null; then - echo "E: another retrain process is already running over that Maildir." >&2 - exit 1 +if [ -n "$maildir" ]; then + LOCKFILE="$maildir/.retrain.lock" + trap "rm -f $LOCKFILE" 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + if ! lockfile -0 -r0 -l 3600 "$LOCKFILE" 2>/dev/null; then + echo "E: another retrain process is already running over that Maildir." >&2 + exit 1 + fi + + files="$files $(find $MAILDIR/cur $MAILDIR/new -type f)" fi -find $MAILDIR/cur $MAILDIR/new -type f | while read msg; do - $NICE ${0%/*}/train $ARG "$msg" | $PROCMAIL || ret=$? +for msg in $files; do + $NICE ${0%/*}/train $ARG "$msg" | $RESUBMIT || ret=$? case "${ret:-0}" in 0|75) :;; + *) + echo "E: resubmission returned with exit code $ret" >&2 + continue + ;; esac rm -f "$msg" sleep $PAUSETIME done -rm -f "$LOCKFILE" -trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +if [ -n "${LOCKFILE:-}" ]; then + rm -f "$LOCKFILE" + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +fi exit 0