swerc

anselm's simpler werc fork
git clone git://git.suckless.org/swerc
Log | Files | Refs | README

commit ff59b2186ffb40b140abc213d0c6a6520e1a32d1
parent 6326e734a9a355201b86299b756527ea13564de0
Author: uriel@soma <unknown>
Date:   Fri,  6 Feb 2009 21:03:58 +0000

Merge.
Diffstat:
Abin/fltr_cache.rc | 35+++++++++++++++++++++++++++++++++++
Dbin/fproc_cache.rc | 19-------------------
Mbin/werc.rc | 3++-
Metc/initrc | 12++++++------
Mlib/sitemap.tpl | 80++++++++++++++++++++++++++++++++++++++-----------------------------------------
5 files changed, 81 insertions(+), 68 deletions(-)

diff --git a/bin/fltr_cache.rc 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 @@ -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 @@ -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 @@ -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 @@ -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 '<ul class="sitemap-list">' - # Don't hide blog dirs for now - #if(! ~ $#blogDirs 0 || ~ $1 */blog */Blog) - # echo '' - #if not - if(! ~ $#redirectPermanent 1) - { - - for(i in `{ls -dF $d^*/ $d^*.md $d^*.html $d^*.txt >[2]/dev/null | sed $dirfilter$dirclean}) { - desc='' - if(test -f $i.md) - desc=`{getMdDesc $i.md} - if not if(~ $i */ && test -f $i/index.md) - desc=`{getMdDesc $i/index.md} - if not if(test -f $i.html) { - # H1 is not reliable because htmlroff doesn't use it :( - #desc = `{cat $i.html |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' < $i.html} - if(~ $#desc 0) - desc=`{sed 's/<[^>]*>//g; 1q' < $i.html} - #desc=`{/bin/sed -e '0,/<[Bb][Oo][Dd][Yy]/d;s/<[^>]*>//g;/^$/d' < $i.html >[2]/dev/null | sed 1q} - } - + for(i in `{ls -dF $d^*/ $d^*.md $d^*.html $d^*.txt >[2]/dev/null | sed $dirfilter}) { + desc=`{get_file_title $i} + u=`{echo $i|sed 's!'$sitedir'!!; '$dirclean's!/index$!/!; '} if(! ~ $#desc 0 && ! ~ $desc '') desc=' - '$"desc - tit=`{echo /$i|sed 's/_/ /g; s,.*/([^/]+)/?$,\1,'} - echo '<li><a href="/'$i'">'^$"tit^'</a>' $"desc '</li>' - echo -n $base_url^$i >> $tmpfile - if(test -d $i) { - echo / >> $tmpfile + n=`{echo /$u|sed 's/_/ /g; s,.*/([^/]+)/?$,\1,'} + echo '<li><a href="'$base_url$u'">'^$"n^'</a>' $"desc '</li>' + echo $base_url^$u >> $tmpfile + if(test -d $i) @{ listDir $i } - } - if not - echo >> $tmpfile - } } echo '</ul>' } -cd $sitedir -listDir '' +fltr_cache listDir $sitedir/ +#listDir $sitedir/ -cp $tmpfile ./sitemap.txt -rm $tmpfile +if(test -s $tmpfile) + mv $tmpfile $sitedir/sitemap.txt & %}