From a0a764502272b3a5303ddf439149a5bec6acb421 Mon Sep 17 00:00:00 2001 From: Uriel Date: Fri, 6 Feb 2009 20:42:15 +0100 Subject: [PATCH] Make fproc_cache take an optional second arg that can be a file or dir name, if provided that file/path will be used as input for the first argument removing the need for a temporary file. --- bin/fproc_cache.rc | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/bin/fproc_cache.rc b/bin/fproc_cache.rc index 11619e6..55096b9 100755 --- a/bin/fproc_cache.rc +++ b/bin/fproc_cache.rc @@ -1,19 +1,34 @@ #!/usr/bin/env rc #. 9.rc # Not really needed when calling from werc, only would be needed if you use fproc_cache.rc standalone -# TODO: Allow to provide two arguments, second arg is a file name, use filename+size+mtime for hashing. -# Useful when dealing with many big files (eg., thumb gallery generation). + +a=() +tmpf=() proc=$1 -tmpfile=/tmp/fmttmp.$pid -score=`{{tee $tmpfile || exit 1} | sha1sum} +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} +} cachedir=/tmp/fproc_cache/$score mkdir -p $cachedir >[2]/dev/null if(test -s $cachedir/$proc) cat $cachedir/$proc if not - if($proc < $tmpfile | tee $cachedir/$pid) + if($proc $a < $f | tee $cachedir/$pid) mv $cachedir/$pid $cachedir/$proc -rm $tmpfile $cachedir/$pid >[2]/dev/null & +rm $tmpf $cachedir/$pid >[2]/dev/null &