diff --git a/bin/fltr_cache.rc b/bin/fltr_cache.rc new file mode 100755 index 0000000..f09c963 --- /dev/null +++ b/bin/fltr_cache.rc @@ -0,0 +1,35 @@ +#!/usr/bin/env 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} + } + 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 & +} diff --git a/bin/fproc_cache.rc b/bin/fproc_cache.rc deleted file mode 100755 index 11619e6..0000000 --- a/bin/fproc_cache.rc +++ /dev/null @@ -1,19 +0,0 @@ -#!/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). - -proc=$1 -tmpfile=/tmp/fmttmp.$pid -score=`{{tee $tmpfile || exit 1} | sha1sum} - -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) - mv $cachedir/$pid $cachedir/$proc - -rm $tmpfile $cachedir/$pid >[2]/dev/null & diff --git a/bin/werc.rc b/bin/werc.rc index a274c7c..709d7b5 100755 --- a/bin/werc.rc +++ b/bin/werc.rc @@ -3,6 +3,7 @@ . ./werclib.rc . ./wercconf.rc . ./corehandlers.rc +. ./fltr_cache.rc cd .. forbidden_uri_chars='[^a-zA-Z0-9_+\-\/\.]' @@ -105,7 +106,7 @@ fn werc_exec_request { if(! ~ $#debug 0) dprint $"SERVER_NAME^$"REQUEST_URI - $"HTTP_USER_AGENT - $"REQUEST_METHOD - $"handler_body_main - $"master_template - template $headers $master_template #| awk_buffer + template $headers $master_template | awk_buffer echo $res_tail } diff --git a/etc/initrc b/etc/initrc index c02e0f2..d5c9f57 100644 --- a/etc/initrc +++ b/etc/initrc @@ -9,17 +9,17 @@ # Location of your Plan 9 from User Space installation (usually /usr/local/plan9) plan9port=$PLAN9 +#plan9port=/usr/local/plan9 # Path, make sure the plan9port /bin directory is included before /bin # Keep '.' in path! It is needed. path=($plan9port/bin/ . ./bin/ ./bin/contrib/ /bin/ /usr/bin/) -# Set this to your favorite markdown formatter, eg., markdown.pl (fproc_cache -# is a wrapper around a script it takes as an argument, in the default -# configuration markdown.pl, that caches output) -# Note that some werc components assume a markdown-like formatter, but all -# major functionality should should be formatter agnostic. -formatter=(fproc_cache.rc markdown.pl) +# Set this to your favorite markdown formatter, eg., markdown.pl (fltr_cache +# takes as an argument a filter, in the default configuration markdown.pl, that +# caches output) Note that some werc components assume a markdown-like +# formatter, but all major functionality should should be formatter agnostic. +formatter=(fltr_cache markdown.pl) # Enable debugging, to disable set to () debug=true diff --git a/lib/sitemap.tpl b/lib/sitemap.tpl index 3ade1e9..7967856 100644 --- a/lib/sitemap.tpl +++ b/lib/sitemap.tpl @@ -5,65 +5,61 @@ tmpfile=/tmp/werc_sitemap_$pid.txt echo '' > $tmpfile saveddf=$dirfilter -fn getMdDesc { - sed 's/^(.......................................................................................................[^ ]*).*$/\1/g; 1q' < $1 +fn get_md_title { + sed 's/^(................................................................[^ ]*).*$/\1/g; 1q' < $1 +} + +fn get_html_title { + # H1 is not reliable because htmlroff doesn't use it :( + #desc=`{cat $1 | sed 32q | grep '<[Hh]1>' | sed 's/<[Hh]1>(.*)(<\/[Hh]1>|$)/\1/;s/<[^>]*>//g;1q'} + # Pick the first line of body instead + desc=`{sed -n '/<[Bb][Oo][Dd][Yy]/,/./s/(<[^>]*>|$)//gp' < $1} + if(~ $#desc 0) + desc=`{sed 's/<[^>]*>//g; 1q' < $1} +} + +fn get_file_title { + + if(~ $1 */) { + if(test -f $1/index.md) + get_md_title $1/index.md + if not if(test -f $1/index.html) + get_html_title $1/index.html + } + if not if(~ $1 *.md) + get_md_title $1 + if not if(~ $1 *.html) + get_html_title $1 + if not + echo '' } -# XXX Instead of recursion should use du(1) or similar. fn listDir { d=$1 - if(~ $#d 0) - d='' dirfilter=$saveddf - blogDirs=() if(test -f $d/_werc/config) . ./$d/_werc/config echo '