aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Render.pm
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-10-08 21:56:50 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-10-08 21:56:50 +0000
commitcefbe6210f4e89984bb40062e4f9787b7372dd52 (patch)
tree5fd7195d25c124eef90e8d3e66b44ed1fbd8d644 /IkiWiki/Render.pm
parent118c481766669959c34c30a79aa2667cdcc7aebc (diff)
downloadikiwiki-cefbe6210f4e89984bb40062e4f9787b7372dd52.tar
ikiwiki-cefbe6210f4e89984bb40062e4f9787b7372dd52.tar.gz
* Change %renderedfiles to store an array of files rendered from a given
source file, to allow tracking of extra rendered files like rss feeds. * Note that plugins that accessed this variable will need to be updated! The plugin interface has been increased to version 1.01 for this change. * Add will_render function to the plugin interface, used to register that a page renders a destination file, and do some security checks. * Use will_render in the inline and linkmap plugins. * Previously but no longer rendered files will be cleaned up. * You will need to rebuild your wiki on upgrade to this version.
Diffstat (limited to 'IkiWiki/Render.pm')
-rw-r--r--IkiWiki/Render.pm33
1 files changed, 16 insertions, 17 deletions
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 48a25bef7..deec539ae 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -113,17 +113,6 @@ sub genpage ($$$) { #{{{
return $content;
} #}}}
-sub check_overwrite ($$) { #{{{
- # Important security check. Make sure to call this before saving
- # any files to the source directory.
- my $dest=shift;
- my $src=shift;
-
- if (! exists $renderedfiles{$src} && -e $dest && ! $config{rebuild}) {
- error("$dest already exists and was not rendered from $src before");
- }
-} #}}}
-
sub mtime ($) { #{{{
my $file=shift;
@@ -157,6 +146,7 @@ sub render ($) { #{{{
my $content=readfile($srcfile);
my $page=pagename($file);
delete $depends{$page};
+ will_render($page, htmlpage($page), 1);
$content=filter($page, $content);
@@ -166,20 +156,17 @@ sub render ($) { #{{{
$content=linkify($page, $page, $content);
$content=htmlize($page, $type, $content);
- check_overwrite("$config{destdir}/".htmlpage($page), $page);
writefile(htmlpage($page), $config{destdir},
genpage($page, $content, mtime($srcfile)));
$oldpagemtime{$page}=time;
- $renderedfiles{$page}=htmlpage($page);
}
else {
my $content=readfile($srcfile, 1);
$links{$file}=[];
delete $depends{$file};
- check_overwrite("$config{destdir}/$file", $file);
+ will_render($file, $file, 1);
writefile($file, $config{destdir}, $content, 1);
$oldpagemtime{$file}=time;
- $renderedfiles{$file}=$file;
}
} #}}}
@@ -269,9 +256,10 @@ sub refresh () { #{{{
if (! $exists{$page}) {
debug("removing old page $page");
push @del, $pagesources{$page};
- prune($config{destdir}."/".$renderedfiles{$page});
- delete $renderedfiles{$page};
+ $renderedfiles{$page}=[];
$oldpagemtime{$page}=0;
+ prune($config{destdir}."/".$_)
+ foreach @{$oldrenderedfiles{$page}};
delete $pagesources{$page};
}
}
@@ -366,6 +354,17 @@ FILE: foreach my $file (@files) {
}
}
+ # Remove no longer rendered files.
+ foreach my $src (keys %rendered) {
+ my $page=pagename($src);
+ foreach my $file (@{$oldrenderedfiles{$page}}) {
+ if (! grep { $_ eq $file } @{$renderedfiles{$page}}) {
+ debug("removing $file, no longer rendered by $page");
+ prune($config{destdir}."/".$file);
+ }
+ }
+ }
+
if (@del) {
run_hooks(delete => sub { shift->(@del) });
}