X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/178ab4c51cc64ad5fcfb191c1f93118b40d099c0..cba8d38f463b8e5bac43bb1a8da6f39edad6d7b2:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 7ca9a3820..cbba28251 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -93,10 +93,14 @@ sub genpage ($$$) { #{{{ $template->param(historyurl => $u); $actions++; } - if ($config{discussion} && $page !~ /.*\/discussion$/ && - (length $config{cgiurl} || exists $links{$page."/".gettext("discussion")})) { - $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), 1, 1)); - $actions++; + if ($config{discussion}) { + my $discussionlink=gettext("discussion"); + if ($page !~ /.*\/\Q$discussionlink\E$/ && + (length $config{cgiurl} || + exists $links{$page."/".$discussionlink})) { + $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), 1, 1)); + $actions++; + } } if ($actions) { @@ -191,10 +195,29 @@ sub render ($) { #{{{ $oldpagemtime{$page}=time; } else { - my $content=readfile($srcfile, 1); + my $srcfd=readfile($srcfile, 1, 1); delete $depends{$file}; will_render($file, $file, 1); - writefile($file, $config{destdir}, $content, 1); + writefile($file, $config{destdir}, undef, 1, sub { + my $destfd=shift; + my $cleanup=shift; + + my $blksize = 16384; + my ($len, $buf, $written); + while ($len = sysread $srcfd, $buf, $blksize) { + if (! defined $len) { + next if $! =~ /^Interrupted/; + error("failed to read $srcfile: $!", $cleanup); + } + my $offset = 0; + while ($len) { + defined($written = syswrite $destfd, $buf, $len, $offset) + or error("failed to write $file: $!", $cleanup); + $len -= $written; + $offset += $written; + } + } + }); $oldpagemtime{$file}=time; } } #}}} @@ -341,7 +364,7 @@ sub refresh () { #{{{ foreach my $file (keys %rendered, @del) { next if $f eq $file; my $page=pagename($file); - if (pagespec_match($page, $depends{$p})) { + if (pagespec_match($page, $depends{$p}, $p)) { debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page)); render($f); $rendered{$f}=1;