commit f8d4f30a045c0c0cb53d9e35ba4ffe04f5006a10
parent d2902ce4e8a85246487c554b334375c147ef73ac
Author: Jaromil <jaromil@dyne.org>
Date: Fri, 2 May 2014 15:40:10 +0200
fixes to recursive folder re-filtering
Diffstat:
2 files changed, 37 insertions(+), 31 deletions(-)
diff --git a/src/jaro b/src/jaro
@@ -660,7 +660,7 @@ main()
later) later ${PARAM} ;;
- update) update ;;
+ update|init) update ;;
help) CLEANEXIT=0; usage ;;
@@ -694,8 +694,6 @@ main()
isonline) is_online ${=PARAM}; exitcode=$? ;;
- 'init') CLEANEXIT=0; maildir_init "`pwd`" ;;
-
'source') CLEANEXIT=0; return 0 ;;
__default) func "no command provided"
autostart ${PARAM}
diff --git a/src/zlibs/maildirs b/src/zlibs/maildirs
@@ -89,35 +89,43 @@ list_maildirs() {
return ${#maildirs}
}
+maildirs_lastlog() {
+ # returns an array of destinations maildirs touched by the last filtering operation
+ # based on the procmail log format
+ typeset -alU dests prio lasts
+ _folders="`cat ${MAILDIRS}/logs/procmail.log|awk '/Folder:/ {print $2}' | cut -d/ -f1`"
+ for d in ${(f)_folders}; do
+ func "maildir touched by last operation: $d"
+ # skip procmail glitch
+ { test "$d" = "procmail" } && { continue }
+ # put filtered to last
+ [[ ${PARAM} == *${d}* ]] && { lasts=($lasts $d); continue }
+ # always give priority to known, then to priv, then the rest
+ { test "$d" = "known" } && { prio=(known $prio); continue }
+ { test "$d" = "priv" } && { prio=($prio priv); continue }
+ # skip zz. trash
+ [[ $d == zz.* ]] && { continue }
+ # put them to filter
+ dests+=($d)
+ done
+ print "${=prio} ${=dests} ${=lasts}"
+ unset dests
+ unset prio
+ unset lasts
+}
+
rmdupes() {
## special argument lastlog
{ test "$1" = "lastlog" } && {
- # gather a list of destinations for last filtering operation
- typeset -alU dests prio lasts
- _folders="`cat ${WORKDIR}/log/procmail.log|awk '/Folder:/ {print $2}' | cut -d/ -f1`"
- for d in ${(f)_folders}; do
- # skip procmail glitch
- { test "$d" = "procmail" } && { continue }
- # put filtered to last
- [[ ${PARAM} == *${d}* ]] && { lasts=($lasts $d); continue }
- # always give priority to known, then to priv, then the rest
- { test "$d" = "known" } && { prio=(known $prio); continue }
- { test "$d" = "priv" } && { prio=($prio priv); continue }
- # skip zz. trash
- [[ $d == zz.* ]] && { continue }
- # put them to filter
- dests+=($d)
- done
- act "Pruning duplicates across ${#dests} destination maildirs:"
- act "${prio} ${dests} ${lasts}"
+ lastdirs=(`maildirs_lastlog`)
+ act "Pruning duplicates across ${#lastdirs} destination maildirs:"
+ act "${lastdirs}"
# recursion here
- rmdupes ${=prio} ${=dests} ${=lasts}
+ rmdupes ${=lastdirs}
notice "Done pruning"
# all the prioritization above is so that duplicates are spotted
# across different maildirs and deleted from the filtered source
- unset dests
- unset prio
return 0
}
###############
@@ -125,7 +133,7 @@ rmdupes() {
tot=0
typeset -al msgs
for folder in ${=@}; do
- { test -r "$folder" } || { folder=$MAILDIRS/$folder }
+ { test -r "$folder" } || { folder="$MAILDIRS/$folder" }
{ test -r "$folder" } || {
error "Directory not found: $folder"
continue }
@@ -215,11 +223,11 @@ filter() {
# archive old procmail log
{ test -r "$MAILDIRS/logs/procmail.log" } && {
- newlock $MAILDIRS/logs/procmail-${datestamp}.log
- cat $MAILDIRS/logs/procmail.log \
- >> $MAILDIRS/logs/procmail-${datestamp}.log
- ${=rm} $MAILDIRS/logs/procmail.log
- unlock $MAILDIRS/logs/procmail-${datestamp}.log
+ newlock "$MAILDIRS/logs/procmail-${datestamp}.log"
+ cat "$MAILDIRS/logs/procmail.log" \
+ >> "$MAILDIRS/logs/procmail-${datestamp}.log"
+ ${=rm} "$MAILDIRS/logs/procmail.log"
+ unlock "$MAILDIRS/logs/procmail-${datestamp}.log"
}
prc=$PROCMAILDIR/rc
@@ -227,7 +235,7 @@ filter() {
typeset -al fall
for folder in ${=PARAM}; do
- { test -r "$folder" } || { folder=$MAILDIRS/$folder }
+ { test -r "$folder" } || { folder="$MAILDIRS/$folder" }
{ test -r "$folder" } || {
error "Directory not found: $folder"
continue }