* aggregate: Forking a child broke the one state that mattered: Forcing

the aggregating page to be rebuilt. Fix this.
master
Joey Hess 2008-02-02 23:56:13 -05:00
parent 06841ed6b3
commit 0779013683
2 changed files with 20 additions and 11 deletions

View File

@ -38,15 +38,18 @@ sub checkconfig () { #{{{
exit 1; exit 1;
} }
loadstate();
my @feeds=needsaggregate();
return unless @feeds;
# Fork a child process to handle the aggregation. # Fork a child process to handle the aggregation.
# The parent process will then handle building the result. # The parent process will then handle building the
# This avoids messy code to clear state accumulated while # result. This avoids messy code to clear state
# aggregating. # accumulated while aggregating.
defined(my $pid = fork) or error("Can't fork: $!"); defined(my $pid = fork) or error("Can't fork: $!");
if (! $pid) { if (! $pid) {
loadstate();
IkiWiki::loadindex(); IkiWiki::loadindex();
aggregate(); aggregate(@feeds);
expire(); expire();
savestate(); savestate();
exit 0; exit 0;
@ -55,6 +58,8 @@ sub checkconfig () { #{{{
if ($?) { if ($?) {
error "aggregation failed with code $?"; error "aggregation failed with code $?";
} }
$IkiWiki::forcerebuild{$_->{sourcepage}}=1
foreach @feeds;
IkiWiki::unlockwiki(); IkiWiki::unlockwiki();
} }
@ -254,7 +259,12 @@ sub expire () { #{{{
} }
} #}}} } #}}}
sub aggregate () { #{{{ sub needsaggregate () { #{{{
return values %feeds if $config{rebuild};
return grep { time - $_->{lastupdate} >= $_->{updateinterval} } values %feeds;
} #}}}
sub aggregate (@) { #{{{
eval q{use XML::Feed}; eval q{use XML::Feed};
error($@) if $@; error($@) if $@;
eval q{use URI::Fetch}; eval q{use URI::Fetch};
@ -262,15 +272,12 @@ sub aggregate () { #{{{
eval q{use HTML::Entities}; eval q{use HTML::Entities};
error($@) if $@; error($@) if $@;
foreach my $feed (values %feeds) { foreach my $feed (@_) {
next unless $config{rebuild} ||
time - $feed->{lastupdate} >= $feed->{updateinterval};
$feed->{lastupdate}=time; $feed->{lastupdate}=time;
$feed->{newposts}=0; $feed->{newposts}=0;
$feed->{message}=sprintf(gettext("processed ok at %s"), $feed->{message}=sprintf(gettext("processed ok at %s"),
displaytime($feed->{lastupdate})); displaytime($feed->{lastupdate}));
$feed->{error}=0; $feed->{error}=0;
$IkiWiki::forcerebuild{$feed->{sourcepage}}=1;
debug(sprintf(gettext("checking feed %s ..."), $feed->{name})); debug(sprintf(gettext("checking feed %s ..."), $feed->{name}));

2
debian/changelog vendored
View File

@ -6,6 +6,8 @@ ikiwiki (2.31) UNRELEASED; urgency=low
that contributes to a page's content and using the youngest of them all, that contributes to a page's content and using the youngest of them all,
as well as special cases for things like the version plugin, and it's just as well as special cases for things like the version plugin, and it's just
too complex to do. too complex to do.
* aggregate: Forking a child broke the one state that mattered: Forcing
the aggregating page to be rebuilt. Fix this.
-- Joey Hess <joeyh@debian.org> Sat, 02 Feb 2008 23:36:31 -0500 -- Joey Hess <joeyh@debian.org> Sat, 02 Feb 2008 23:36:31 -0500