X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=IkiWiki%2FPlugin%2Faggregate.pm;h=0f50fab06c6795154bff70786459a3ff474464d8;hb=1f6591f0a61415777a662d979c5c142c7f4ad7cd;hp=c3cbbae0553464b9c8d20fab97333c788a7290eb;hpb=7a40bcab9a223d29189632cb05d26bc558927520;p=ikiwiki.git diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index c3cbbae05..0f50fab06 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -37,25 +37,14 @@ sub checkconfig () { #{{{ debug("wiki is locked by another process, not aggregating"); exit 1; } - - # Fork a child process to handle the aggregation. - # The parent process will then handle building the result. - # This avoids messy code to clear state accumulated while - # aggregating. - defined(my $pid = fork) or error("Can't fork: $!"); - if (! $pid) { - loadstate(); - IkiWiki::loadindex(); - aggregate(); - expire(); - savestate(); - exit 0; - } - waitpid($pid,0); - if ($?) { - error "aggregation failed with code $?"; - } - + + loadstate(); + IkiWiki::loadindex(); + aggregate(); + expire(); + savestate(); + clearstate(); + IkiWiki::unlockwiki(); } } #}}} @@ -66,7 +55,7 @@ sub needsbuild (@) { #{{{ loadstate(); # if not already loaded foreach my $feed (values %feeds) { - if (exists $pagesources{$page} && + if (exists $pagesources{$feed->{sourcepage}} && grep { $_ eq $pagesources{$feed->{sourcepage}} } @$needsbuild) { # Mark all feeds originating on this page as removable; # preprocess will unmark those that still exist. @@ -143,7 +132,7 @@ sub loadstate () { #{{{ return if $state_loaded; $state_loaded=1; if (-e "$config{wikistatedir}/aggregate") { - open(IN, "$config{wikistatedir}/aggregate") || + open(IN, "<", "$config{wikistatedir}/aggregate") || die "$config{wikistatedir}/aggregate: $!"; while () { $_=IkiWiki::possibly_foolish_untaint($_); @@ -181,7 +170,7 @@ sub savestate () { #{{{ error($@) if $@; my $newfile="$config{wikistatedir}/aggregate.new"; my $cleanup = sub { unlink($newfile) }; - open (OUT, ">$newfile") || error("open $newfile: $!", $cleanup); + open (OUT, ">", $newfile) || error("open $newfile: $!", $cleanup); foreach my $data (values %feeds, values %guids) { if ($data->{remove}) { if ($data->{name}) { @@ -223,6 +212,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};