* aggregate: Revert use of forking to not save state, that was not the right
[ikiwiki.git] / IkiWiki / Plugin / aggregate.pm
index a2c10ce5c337395ca53ef58c396cb0d8009f3ad6..0f50fab06c6795154bff70786459a3ff474464d8 100644 (file)
@@ -55,7 +55,8 @@ sub needsbuild (@) { #{{{
        loadstate(); # if not already loaded
 
        foreach my $feed (values %feeds) {
-               if (grep { $_ eq $pagesources{$feed->{sourcepage}} } @$needsbuild) {
+               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.
                        remove_feeds($feed->{sourcepage});
@@ -131,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 (<IN>) {
                        $_=IkiWiki::possibly_foolish_untaint($_);
@@ -169,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}) {
@@ -416,7 +417,8 @@ sub add_page (@) { #{{{
 
        # Set the mtime, this lets the build process get the right creation
        # time on record for the new page.
-       utime $mtime, $mtime, pagefile($guid->{page}) if defined $mtime;
+       utime $mtime, $mtime, pagefile($guid->{page})
+               if defined $mtime && $mtime <= time;
 } #}}}
 
 sub htmlescape ($) { #{{{