From a326ffed1f20aaebf751002476696e9878178092 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 26 Aug 2008 14:38:32 -0400 Subject: [PATCH] autoindex: Avoid re-adding previously deleted (or renamed) pages. --- IkiWiki/Plugin/autoindex.pm | 30 ++++++++++++++++++++++++++++-- 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 Thu, 21 Aug 2008 16:20:58 -0400 -- 2.39.5