master
joey 2006-03-10 06:48:02 +00:00
parent 56fd145ceb
commit aa0afc56cb
1 changed files with 26 additions and 18 deletions

44
ikiwiki
View File

@ -172,6 +172,8 @@ sub htmllink ($$) {
return $link if $page eq $bestlink; 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) { if (! grep { $_ eq $bestlink } values %renderedfiles) {
$bestlink=htmlpage($bestlink); $bestlink=htmlpage($bestlink);
} }
@ -214,8 +216,11 @@ sub linkbacks ($$) {
my @links; my @links;
foreach my $p (keys %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)); 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>"; push @links, "<a href=\"$href\">$p</a>";
} }
} }
@ -289,8 +294,8 @@ sub loadindex () {
my $page=pagename($file); my $page=pagename($file);
$pagesources{$page}=$file; $pagesources{$page}=$file;
$oldpagemtime{$page}=$mtime; $oldpagemtime{$page}=$mtime;
$links{$page}=[@links];
$oldlinks{$page}=[@links]; $oldlinks{$page}=[@links];
$links{$page}=[@links];
$renderedfiles{$page}=$rendered; $renderedfiles{$page}=$rendered;
} }
close IN; close IN;
@ -361,6 +366,7 @@ sub refresh () {
prune($destdir."/".$renderedfiles{$page}); prune($destdir."/".$renderedfiles{$page});
delete $renderedfiles{$page}; delete $renderedfiles{$page};
$oldpagemtime{$page}=0; $oldpagemtime{$page}=0;
delete $pagesources{$page};
} }
} }
@ -374,18 +380,15 @@ sub refresh () {
render($file); render($file);
$rendered{$file}=1; $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 # if any files were added or removed, check to see if each page
# needs an update due to linking to them # 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) { if (@add || @del) {
FILE: foreach my $file (@files) { FILE: foreach my $file (@files) {
next if $rendered{$file};
my $page=pagename($file); my $page=pagename($file);
foreach my $f (@add, @del) { foreach my $f (@add, @del) {
my $p=pagename($f); my $p=pagename($f);
@ -393,6 +396,7 @@ FILE: foreach my $file (@files) {
if (bestlink($page, $link) eq $p) { if (bestlink($page, $link) eq $p) {
debug("rendering $file, which links to $p"); debug("rendering $file, which links to $p");
render($file); render($file);
$rendered{$file}=1;
next FILE; next FILE;
} }
} }
@ -408,19 +412,23 @@ FILE: foreach my $file (@files) {
if (%rendered) { if (%rendered) {
my %linkchanged; my %linkchanged;
foreach my $file (keys %rendered, @del) { foreach my $file (keys %rendered, @del) {
my $pagename=pagename($file); my $page=pagename($file);
if (exists $links{$pagename}) { if (exists $links{$page}) {
foreach my $link (@{$links{$pagename}}) { foreach my $link (@{$links{$page}}) {
if (! exists $oldlinks{$pagename} || $link=bestlink($page, $link);
! grep { $_ eq $link } @{$oldlinks{$pagename}}) { if (length $link &&
! exists $oldlinks{$page} ||
! grep { $_ eq $link } @{$oldlinks{$page}}) {
$linkchanged{$link}=1; $linkchanged{$link}=1;
} }
} }
} }
if (exists $oldlinks{$pagename}) { if (exists $oldlinks{$page}) {
foreach my $link (@{$oldlinks{$pagename}}) { foreach my $link (@{$oldlinks{$page}}) {
if (! exists $links{$pagename} || $link=bestlink($page, $link);
! grep { $_ eq $link } @{$links{$pagename}}) { if (length $link &&
! exists $links{$page} ||
! grep { $_ eq $link } @{$links{$page}}) {
$linkchanged{$link}=1; $linkchanged{$link}=1;
} }
} }
@ -436,6 +444,6 @@ FILE: foreach my $file (@files) {
} }
} }
loadindex(); loadindex() unless $rebuild;
refresh(); refresh();
saveindex(); saveindex();