diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-07-13 14:41:40 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-07-13 14:41:40 -0400 |
commit | edb59cd5b949de7a68f3b74e7949bf3893b23c6a (patch) | |
tree | 036db895d4013c4d5b7ae2cb39b5c26ef6f8fa66 /IkiWiki.pm | |
parent | 2bd4dea7f029f30b4b07ba2e91358f5c3bf04a10 (diff) |
Error handling improvement for preprocess hooks. It's now safe to call error() from such hooks; it will cause a nicely formatted error message to be inserted into the page.
Diffstat (limited to 'IkiWiki.pm')
-rw-r--r-- | IkiWiki.pm | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index d4e19c388..80e317110 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -768,21 +768,30 @@ sub preprocess ($$$;$$) { #{{{ } my $ret; if (! $scan) { - $ret=$hooks{preprocess}{$command}{call}->( - @params, - page => $page, - destpage => $destpage, - preview => $preprocess_preview, - ); + $ret=eval { + $hooks{preprocess}{$command}{call}->( + @params, + page => $page, + destpage => $destpage, + preview => $preprocess_preview, + ); + }; + if ($@) { + chomp $@; + $ret="[[!$command <span class=\"error\">". + gettext("Error").": $@"."</span>]]"; + } } else { # use void context during scan pass - $hooks{preprocess}{$command}{call}->( - @params, - page => $page, - destpage => $destpage, - preview => $preprocess_preview, - ); + eval { + $hooks{preprocess}{$command}{call}->( + @params, + page => $page, + destpage => $destpage, + preview => $preprocess_preview, + ); + }; $ret=""; } $preprocessing{$page}--; |