X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/dca6679a5442581746daf89e78ee83712a017b98..aef85a247a4a9fbfe61225324f5efb462de52a6a:/IkiWiki/Plugin/autoindex.pm?ds=inline diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm index ba2dcb907..78571b276 100644 --- a/IkiWiki/Plugin/autoindex.pm +++ b/IkiWiki/Plugin/autoindex.pm @@ -7,8 +7,10 @@ use IkiWiki 3.00; use Encode; sub import { + hook(type => "checkconfig", id => "autoindex", call => \&checkconfig); hook(type => "getsetup", id => "autoindex", call => \&getsetup); hook(type => "refresh", id => "autoindex", call => \&refresh); + IkiWiki::loadplugin("transient"); } sub getsetup () { @@ -17,6 +19,20 @@ sub getsetup () { safe => 1, rebuild => 0, }, + autoindex_commit => { + type => "boolean", + example => 1, + default => 1, + description => "commit autocreated index pages", + safe => 1, + rebuild => 0, + }, +} + +sub checkconfig () { + if (! defined $config{autoindex_commit}) { + $config{autoindex_commit} = 1; + } } sub genindex ($) { @@ -28,11 +44,16 @@ sub genindex ($) { $page); debug($message); + my $dir = $config{srcdir}; + if (! $config{autoindex_commit}) { + $dir = $IkiWiki::Plugin::transient::transientdir; + } + my $template = template("autoindex.tmpl"); $template->param(page => $page); - writefile($file, $config{srcdir}, $template->output); + writefile($file, $dir, $template->output); - if ($config{rcs}) { + if ($config{rcs} && $config{autoindex_commit}) { IkiWiki::disable_commit_hook(); IkiWiki::rcs_add($file); IkiWiki::rcs_commit_staged(message => $message); @@ -50,6 +71,7 @@ sub refresh () { my (%pages, %dirs); foreach my $dir ($config{srcdir}, @{$config{underlaydirs}}, $config{underlaydir}) { + next if $dir eq $IkiWiki::Plugin::transient::transientdir; chdir($dir) || next; find({ @@ -78,53 +100,38 @@ sub refresh () { chdir($origdir) || die "chdir $origdir: $!"; } - # FIXME: some of this is probably redundant with add_autofile now, and - # the rest should perhaps be added to the autofile machinery - + # Compatibility code. + # + # {deleted} contains pages that have been deleted at some point. + # This plugin used to delete from the hash sometimes, but no longer + # does; in [[todo/autoindex_should_use_add__95__autofile]] Joey + # thought the old behaviour was probably a bug. + # + # The effect of listing a page in {deleted} was to avoid re-creating + # it; we migrate these pages to {autofile} which has the same effect. + # However, {autofile} contains source filenames whereas {deleted} + # contains page names. my %deleted; if (ref $wikistate{autoindex}{deleted}) { %deleted=%{$wikistate{autoindex}{deleted}}; + delete $wikistate{autoindex}{deleted}; } elsif (ref $pagestate{index}{autoindex}{deleted}) { - # compatability code + # an even older version %deleted=%{$pagestate{index}{autoindex}{deleted}}; delete $pagestate{index}{autoindex}; } if (keys %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}; - } + my $file=newpagefile($dir, $config{default_pageext}); + $wikistate{autoindex}{autofile}{$file} = 1; } - $wikistate{autoindex}{deleted}=\%deleted; } - my @needed; foreach my $dir (keys %dirs) { - 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 $wikistate{autoindex}{deleted}) { - $wikistate{autoindex}{deleted}={}; - } - ${$wikistate{autoindex}{deleted}}{$dir}=1; - } - else { - push @needed, $dir; - } - } - } - - if (@needed) { - foreach my $page (@needed) { - genindex($page); + if (! exists $pages{$dir} && grep /^$dir\/.*/, keys %pages) { + genindex($dir); } } }