]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Render.pm
web commit by JoshTriplett: upcase Subversion.
[ikiwiki.git] / IkiWiki / Render.pm
index 30249b9bd1e6dfef00af3bfc1a4e0815bbbf9ac0..d8bc5a9d90267d1357f5187ec9bc3420964030d5 100644 (file)
@@ -93,9 +93,14 @@ sub genpage ($$$) { #{{{
                $template->param(historyurl => $u);
                $actions++;
        }
-       if ($config{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) {
@@ -190,10 +195,25 @@ 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);
+               my $destfd=writefile($file, $config{destdir}, undef, 1, 1);
+               my $blksize = 16384;
+               my ($len, $buf, $written);
+               while ($len = sysread $srcfd, $buf, $blksize) {
+                       if (! defined $len) {
+                               next if $! =~ /^Interrupted/;
+                               error("failed to read $srcfile: $!");
+                       }
+                       my $offset = 0;
+                       while ($len) {
+                               defined($written = syswrite OUT, $buf, $len, $offset)
+                                       or error("failed to write $file: $!");
+                               $len -= $written;
+                               $offset += $written;
+                       }
+               }
                $oldpagemtime{$file}=time;
        }
 } #}}}
@@ -340,7 +360,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;