]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
* aggregate: Forking a child broke the one state that mattered: Forcing
authorJoey Hess <joey@kodama.kitenet.net>
Sun, 3 Feb 2008 04:56:13 +0000 (23:56 -0500)
committerJoey Hess <joey@kodama.kitenet.net>
Sun, 3 Feb 2008 04:56:13 +0000 (23:56 -0500)
  the aggregating page to be rebuilt. Fix this.

IkiWiki/Plugin/aggregate.pm
debian/changelog

index 2a4d10411dab8ac87655e6101f20f7dff1c8bd3f..736b0e0d5977c67428222c363ae29be9006fc34e 100644 (file)
@@ -37,16 +37,19 @@ sub checkconfig () { #{{{
                        debug("wiki is locked by another process, not aggregating");
                        exit 1;
                }
-               
+
+               loadstate();
+               my @feeds=needsaggregate();
+               return unless @feeds;
+
                # 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.
+               # 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();
+                       aggregate(@feeds);
                        expire();
                        savestate();
                        exit 0;
@@ -55,6 +58,8 @@ sub checkconfig () { #{{{
                if ($?) {
                        error "aggregation failed with code $?";
                }
+               $IkiWiki::forcerebuild{$_->{sourcepage}}=1
+                       foreach @feeds;
                
                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};
        error($@) if $@;
        eval q{use URI::Fetch};
@@ -262,15 +272,12 @@ sub aggregate () { #{{{
        eval q{use HTML::Entities};
        error($@) if $@;
 
-       foreach my $feed (values %feeds) {
-               next unless $config{rebuild} || 
-                       time - $feed->{lastupdate} >= $feed->{updateinterval};
+       foreach my $feed (@_) {
                $feed->{lastupdate}=time;
                $feed->{newposts}=0;
                $feed->{message}=sprintf(gettext("processed ok at %s"),
                        displaytime($feed->{lastupdate}));
                $feed->{error}=0;
-               $IkiWiki::forcerebuild{$feed->{sourcepage}}=1;
 
                debug(sprintf(gettext("checking feed %s ..."), $feed->{name}));
 
index b7096aec46212e04418b3f06648bd9207078dddc..df7b8b42498d4b7e5eb5ae154365fece8550cc92 100644 (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,
     as well as special cases for things like the version plugin, and it's just
     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