bugfixes
[ikiwiki.git] / ikiwiki
diff --git a/ikiwiki b/ikiwiki
index c57c2e50798797ef109337ccb7f63ab6bfede6b9..2808ccc78eab6074c2c8d1a23f8d2f775cee2f91 100755 (executable)
--- a/ikiwiki
+++ b/ikiwiki
@@ -172,6 +172,8 @@ sub htmllink ($$) {
 
        return $link if $page eq $bestlink;
        
+       # TODO BUG: %renderedfiles may not have it, if the linked to page
+       # was also added and isn't yet rendered!
        if (! grep { $_ eq $bestlink } values %renderedfiles) {
                $bestlink=htmlpage($bestlink);
        }
@@ -214,8 +216,11 @@ sub linkbacks ($$) {
 
        my @links;
        foreach my $p (keys %links) {
-               if (grep { $_ eq $page } @{$links{$p}}) {
+               if (grep { length $_ && bestlink($p, $_) eq $page } @{$links{$p}}) {
                        my $href=File::Spec->abs2rel(htmlpage($p), dirname($page));
+                       # TODO: if $p is joey/foo/bar and 
+                       # the $page is joey/foo/baz, make the link text
+                       # just be "bar".
                        push @links, "<a href=\"$href\">$p</a>";
                }
        }
@@ -289,8 +294,8 @@ sub loadindex () {
                my $page=pagename($file);
                $pagesources{$page}=$file;
                $oldpagemtime{$page}=$mtime;
-               $links{$page}=[@links];
                $oldlinks{$page}=[@links];
+               $links{$page}=[@links];
                $renderedfiles{$page}=$rendered;
        }
        close IN;
@@ -361,6 +366,7 @@ sub refresh () {
                        prune($destdir."/".$renderedfiles{$page});
                        delete $renderedfiles{$page};
                        $oldpagemtime{$page}=0;
+                       delete $pagesources{$page};
                }
        }
        
@@ -374,18 +380,15 @@ sub refresh () {
                        render($file);
                        $rendered{$file}=1;
                }
-               elsif ($rebuild) {
-                       debug("rebuilding unchanged file $file");
-                       render($file);
-                       $rendered{$file}=1;
-               }
        }
        
        # if any files were added or removed, check to see if each page
        # needs an update due to linking to them
+       # TODO: inefficient; pages may get rendered above and again here;
+       # problem is the bestlink may have changes and we won't know until
+       # now
        if (@add || @del) {
 FILE:          foreach my $file (@files) {
-                       next if $rendered{$file};
                        my $page=pagename($file);
                        foreach my $f (@add, @del) {
                                my $p=pagename($f);
@@ -393,6 +396,7 @@ FILE:               foreach my $file (@files) {
                                        if (bestlink($page, $link) eq $p) {
                                                debug("rendering $file, which links to $p");
                                                render($file);
+                                               $rendered{$file}=1;
                                                next FILE;
                                        }
                                }
@@ -408,19 +412,23 @@ FILE:             foreach my $file (@files) {
        if (%rendered) {
                my %linkchanged;
                foreach my $file (keys %rendered, @del) {
-                       my $pagename=pagename($file);
-                       if (exists $links{$pagename}) {
-                               foreach my $link (@{$links{$pagename}}) {
-                                       if (! exists $oldlinks{$pagename} ||
-                                           ! grep { $_ eq $link } @{$oldlinks{$pagename}}) {
+                       my $page=pagename($file);
+                       if (exists $links{$page}) {
+                               foreach my $link (@{$links{$page}}) {
+                                       $link=bestlink($page, $link);
+                                       if (length $link &&
+                                           ! exists $oldlinks{$page} ||
+                                           ! grep { $_ eq $link } @{$oldlinks{$page}}) {
                                                $linkchanged{$link}=1;
                                        }
                                }
                        }
-                       if (exists $oldlinks{$pagename}) {
-                               foreach my $link (@{$oldlinks{$pagename}}) {
-                                       if (! exists $links{$pagename} ||
-                                           ! grep { $_ eq $link } @{$links{$pagename}}) {
+                       if (exists $oldlinks{$page}) {
+                               foreach my $link (@{$oldlinks{$page}}) {
+                                       $link=bestlink($page, $link);
+                                       if (length $link &&
+                                           ! exists $links{$page} ||
+                                           ! grep { $_ eq $link } @{$links{$page}}) {
                                                $linkchanged{$link}=1;
                                        }
                                }
@@ -436,6 +444,6 @@ FILE:               foreach my $file (@files) {
        }
 }
 
-loadindex();
+loadindex() unless $rebuild;
 refresh();
 saveindex();