diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-08-26 14:38:32 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-08-26 14:39:47 -0400 |
commit | a326ffed1f20aaebf751002476696e9878178092 (patch) | |
tree | 32d50d6689f38ccf4c8c9e50f65b0111f66b848c /IkiWiki/Plugin | |
parent | dbf82a1c44fae74d1ab05127a4895f80837177e5 (diff) |
autoindex: Avoid re-adding previously deleted (or renamed) pages.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/autoindex.pm | 30 |
1 files changed, 28 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; + } } } |