X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/71d2d930272bcdba0b5d2671506e2386ea416632..4bcb29f346a27c078b9b4ca8fc4fb1cba53a679f:/IkiWiki/Plugin/aggregate.pm diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index be2c96369..6f9c78075 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::aggregate; use warnings; use strict; -use IkiWiki; +use IkiWiki 2.00; use HTML::Entities; use HTML::Parser; use HTML::Tagset; @@ -31,22 +31,29 @@ sub getopt () { #{{{ } #}}} 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); @@ -117,10 +124,12 @@ sub delete (@) { #{{{ } } #}}} +my $state_loaded=0; sub loadstate () { #{{{ + return if $state_loaded; if (-e "$config{wikistatedir}/aggregate") { - open (IN, "$config{wikistatedir}/aggregate" || - die "$config{wikistatedir}/aggregate: $!"); + open(IN, "$config{wikistatedir}/aggregate") || + die "$config{wikistatedir}/aggregate: $!"; while () { $_=IkiWiki::possibly_foolish_untaint($_); chomp; @@ -148,6 +157,8 @@ sub loadstate () { #{{{ } close IN; + + $state_loaded=1; } } #}}} @@ -199,6 +210,12 @@ sub savestate () { #{{{ error("rename $newfile: $!", $cleanup); } #}}} +sub clearstate () { #{{{ + %feeds=(); + %guids=(); + $state_loaded=0; +} #}}} + sub expire () { #{{{ foreach my $feed (values %feeds) { next unless $feed->{expireage} || $feed->{expirecount}; @@ -275,7 +292,7 @@ sub aggregate () { #{{{ # One common cause of XML::Feed crashing is a feed # that contains invalid UTF-8 sequences. Convert # feed to ascii to try to work around. - $feed->{message}=sprintf(gettext("invalid UTF-8 stripped from feed")); + $feed->{message}.=" ".sprintf(gettext("(invalid UTF-8 stripped from feed)")); $content=Encode::decode_utf8($content); $f=eval{XML::Feed->parse(\$content)}; } @@ -458,7 +475,7 @@ sub pagefile ($) { #{{{ } #}}} sub htmlfn ($) { #{{{ - return shift().".html"; + return shift().".".$config{htmlext}; } #}}} 1