X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/9cb415f4a455c43bec9f4b9036090124e8fe15ec..1fea8bdde17b04f81138587c235423d21a0620e0:/IkiWiki/Plugin/autoindex.pm diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm index 0e30b9900..d1b3edb1f 100644 --- a/IkiWiki/Plugin/autoindex.pm +++ b/IkiWiki/Plugin/autoindex.pm @@ -21,7 +21,7 @@ sub getsetup () { #{{{ sub genindex ($) { #{{{ my $page=shift; - my $file=$page.".".$config{default_pageext}; + my $file=newpagefile($page, $config{default_pageext}); my $template=template("autoindex.tmpl"); $template->param(page => $page); writefile($file, $config{srcdir}, $template->output); @@ -59,11 +59,37 @@ sub refresh () { #{{{ } }, $dir); } + + my %deleted; + if (ref $pagestate{index}{autoindex}{deleted}) { + %deleted=%{$pagestate{index}{autoindex}{deleted}}; + foreach my $dir (keys %deleted) { + # remove deleted page state if the deleted page is re-added, + # or if all its subpages are deleted + if ($deleted{$dir} && (exists $pages{$dir} || + ! grep /^$dir\/.*/, keys %pages)) { + delete $deleted{$dir}; + } + } + $pagestate{index}{autoindex}{deleted}=\%deleted; + } my @needed; foreach my $dir (keys %dirs) { - if (! exists $pages{$dir} && grep /^$dir\/.*/, keys %pages) { - push @needed, $dir; + if (! exists $pages{$dir} && ! $deleted{$dir} && + grep /^$dir\/.*/, keys %pages) { + if (exists $IkiWiki::pagemtime{$dir}) { + # This page must have just been deleted, so + # don't re-add it. And remember it was + # deleted. + if (! ref $pagestate{index}{autoindex}{deleted}) { + $pagestate{index}{autoindex}{deleted}={}; + } + ${$pagestate{index}{autoindex}{deleted}}{$dir}=1; + } + else { + push @needed, $dir; + } } } @@ -71,7 +97,9 @@ sub refresh () { #{{{ if ($config{rcs}) { IkiWiki::disable_commit_hook(); } - genindex($_) foreach @needed; + foreach my $page (@needed) { + genindex($page); + } if ($config{rcs}) { IkiWiki::rcs_commit_staged( gettext("automatic index generation"),