From a326ffed1f20aaebf751002476696e9878178092 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 26 Aug 2008 14:38:32 -0400 Subject: autoindex: Avoid re-adding previously deleted (or renamed) pages. --- IkiWiki/Plugin/autoindex.pm | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'IkiWiki') 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; + } } } -- cgit v1.2.3