]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Render.pm
* Finally fixed the longstanding inline removal bug.
[ikiwiki.git] / IkiWiki / Render.pm
index 2ad80ced3354457cb4e79c217e36be37f0f52b90..c5d885810f1ff1041308d428e8761e3589849ed6 100644 (file)
@@ -79,7 +79,7 @@ sub genpage ($$$) { #{{{
        my $actions=0;
 
        if (length $config{cgiurl}) {
-               $template->param(editurl => cgiurl(do => "edit", page => $page));
+               $template->param(editurl => cgiurl(do => "edit", page => pagetitle($page, 1)));
                $template->param(prefsurl => cgiurl(do => "prefs"));
                if ($config{rcs}) {
                        $template->param(recentchangesurl => cgiurl(do => "recentchanges"));
@@ -98,7 +98,7 @@ sub genpage ($$$) { #{{{
                if ($page !~ /.*\/\Q$discussionlink\E$/ &&
                   (length $config{cgiurl} ||
                    exists $links{$page."/".$discussionlink})) {
-                       $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), 1, 1));
+                       $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), noimageinline => 1, forcesubpage => 1));
                        $actions++;
                }
        }
@@ -157,7 +157,7 @@ sub scan ($) { #{{{
 
                my @links;
                while ($content =~ /(?<!\\)$config{wiki_link_regexp}/g) {
-                       push @links, titlepage($2);
+                       push @links, linkpage($2);
                }
                if ($config{discussion}) {
                        # Discussion links are a special case since they're
@@ -192,29 +192,31 @@ sub render ($) { #{{{
                
                writefile(htmlpage($page), $config{destdir},
                        genpage($page, $content, mtime($srcfile)));
-               $oldpagemtime{$page}=time;
        }
        else {
                my $srcfd=readfile($srcfile, 1, 1);
                delete $depends{$file};
                will_render($file, $file, 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;
+               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;
+               });
        }
 } #}}}
 
@@ -290,7 +292,7 @@ sub refresh () { #{{{
        foreach my $file (@files) {
                my $page=pagename($file);
                $pagesources{$page}=$file;
-               if (! $oldpagemtime{$page}) {
+               if (! $pagemtime{$page}) {
                        push @add, $file;
                        $pagecase{lc $page}=$page;
                        if ($config{getctime} && -e "$config{srcdir}/$file") {
@@ -302,13 +304,13 @@ sub refresh () { #{{{
                }
        }
        my @del;
-       foreach my $page (keys %oldpagemtime) {
+       foreach my $page (keys %pagemtime) {
                if (! $exists{$page}) {
                        debug(sprintf(gettext("removing old page %s"), $page));
                        push @del, $pagesources{$page};
                        $links{$page}=[];
                        $renderedfiles{$page}=[];
-                       $oldpagemtime{$page}=0;
+                       $pagemtime{$page}=0;
                        prune($config{destdir}."/".$_)
                                foreach @{$oldrenderedfiles{$page}};
                        delete $pagesources{$page};
@@ -320,10 +322,12 @@ sub refresh () { #{{{
        foreach my $file (@files) {
                my $page=pagename($file);
                
-               if (! exists $oldpagemtime{$page} ||
-                   mtime(srcfile($file)) > $oldpagemtime{$page} ||
+               my $mtime=mtime(srcfile($file));
+               if (! exists $pagemtime{$page} ||
+                   $mtime > $pagemtime{$page} ||
                    $forcerebuild{$page}) {
                        debug(sprintf(gettext("scanning %s"), $file));
+                       $pagemtime{$page}=$mtime;
                        push @changed, $file;
                        scan($file);
                }
@@ -360,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;