use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use HTML::Entities;
use HTML::Parser;
use HTML::Tagset;
} #}}}
sub checkconfig () { #{{{
- my $nolock=($config{post_commit} && ! IkiWiki::commit_hook_enabled());
- IkiWiki::lockwiki() unless $nolock;
- loadstate();
- if ($config{aggregate} && ! $nolock) {
+ if ($config{aggregate} && ! ($config{post_commit} &&
+ IkiWiki::commit_hook_enabled())) {
+ if (! IkiWiki::lockwiki(0)) {
+ debug("wiki is locked by another process, not aggregating");
+ exit 1;
+ }
+
+ loadstate();
IkiWiki::loadindex();
aggregate();
expire();
savestate();
+ clearstate();
+
+ IkiWiki::unlockwiki();
}
- IkiWiki::unlockwiki() unless $nolock;
} #}}}
sub filter (@) { #{{{
my %params=@_;
my $page=$params{page};
+ loadstate(); # if not already loaded
# Mark all feeds originating on this page as removable;
# preprocess will unmark those that still exist.
remove_feeds($page);
}
} #}}}
+my $state_loaded=0;
sub loadstate () { #{{{
+ return if $state_loaded;
if (-e "$config{wikistatedir}/aggregate") {
open (IN, "$config{wikistatedir}/aggregate" ||
die "$config{wikistatedir}/aggregate: $!");
}
close IN;
+
+ $state_loaded=1;
}
} #}}}
error("rename $newfile: $!", $cleanup);
} #}}}
+sub clearstate () { #{{{
+ %feeds=();
+ %guids=();
+ $state_loaded=0;
+} #}}}
+
sub expire () { #{{{
foreach my $feed (values %feeds) {
next unless $feed->{expireage} || $feed->{expirecount};