diff options
-rw-r--r-- | IkiWiki/Plugin/autoindex.pm | 30 | ||||
-rw-r--r-- | debian/changelog | 1 |
2 files changed, 29 insertions, 2 deletions
diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm index 0e30b9900..6ff06538f 100644 --- a/IkiWiki/Plugin/autoindex.pm +++ b/IkiWiki/Plugin/autoindex.pm @@ -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; + } } } diff --git a/debian/changelog b/debian/changelog index 485a34ddf..33862223c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ ikiwiki (2.62) UNRELEASED; urgency=low originally part of the attachment plugin. * edittemplate: Don't wipe out edits on preview. * color: New plugin from ptecza. + * autoindex: Avoid re-adding previously deleted (or renamed) pages. -- Joey Hess <joeyh@debian.org> Thu, 21 Aug 2008 16:20:58 -0400 |