#!/bin/rc

fn fltr_cache {
    a=()
    tmpf=()

    proc=$1
    shift

    if(~ $#* 0) {
        tmpf=/tmp/fmttmp.$pid
        f=$tmpf
        score=`{{tee $tmpf || exit 1} | sha1sum}
    }
    if not {
        f=$1
        if(~ $f */) {
            score=`{du -an $f | sha1sum || exit 1} # XXX using -n(bytes) instead of -t(lastmod) because sitemap proc touches files in tree.
            a=$f
            f=/dev/null
        }
        if not {
            score=`{sha1sum $f || exit 1}
            score=$score(1)
        }
    }
    cachedir=/tmp/fltr_cache/$score
    mkdir -p $cachedir >[2]/dev/null

    if(test -s $cachedir/$proc)
        cat $cachedir/$proc
    if not
        if($proc $a < $f | tee $cachedir/$pid)
            mv $cachedir/$pid $cachedir/$proc

    rm $tmpf $cachedir/$pid >[2]/dev/null &
}
