X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/21add7ffa87a5e622d18bdbb24c638c15bdb3800..5143d790b023f7f04ebdf694225b2946af676503:/IkiWiki/Plugin/aggregate.pm

diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 97dd036f6..5a9eb433d 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 2.00;
+use IkiWiki 3.00;
 use HTML::Parser;
 use HTML::Tagset;
 use HTML::Entities;
@@ -46,7 +46,7 @@ sub getsetup () {
 		},
 		aggregateinternal => {
 			type => "boolean",
-			example => 0,
+			example => 1,
 			description => "enable aggregation to internal pages?",
 			safe => 0, # enabling needs manual transition
 			rebuild => 0,
@@ -61,6 +61,10 @@ sub getsetup () {
 }
 
 sub checkconfig () {
+	if (! defined $config{aggregateinternal}) {
+		$config{aggregateinternal}=1;
+	}
+
 	if ($config{aggregate} && ! ($config{post_commit} && 
 	                             IkiWiki::commit_hook_enabled())) {
 		launchaggregation();
@@ -400,6 +404,7 @@ sub mergestate () {
 	}
 
 	# New guids can be created during aggregation.
+	# Guids have a few fields that may be updated during aggregation.
 	# It's also possible that guids were removed from the on-disk state
 	# while the aggregation was in process. That would only happen if
 	# their feed was also removed, so any removed guids added back here
@@ -408,6 +413,11 @@ sub mergestate () {
 		if (! exists $guids{$guid}) {
 			$guids{$guid}=$myguids{$guid};
 		}
+		else {
+			foreach my $field (qw{md5}) {
+				$guids{$guid}->{$field}=$myguids{$guid}->{$field};
+			}
+		}
 	}
 }
 
@@ -530,6 +540,11 @@ sub aggregate (@) {
 		}
 
 		foreach my $entry ($f->entries) {
+			# XML::Feed doesn't work around XML::Atom's bizarre
+			# API, so we will. Real unicode strings? Yes please.
+			# See [[bugs/Aggregated_Atom_feeds_are_double-encoded]]
+			local $XML::Atom::ForceUnicode = 1;
+
 			my $c=$entry->content;
 			# atom feeds may have no content, only a summary
 			if (! defined $c && ref $entry->summary) {
@@ -635,11 +650,13 @@ sub add_page (@) {
 		# creation time on record for the new page.
 		utime $mtime, $mtime, "$config{srcdir}/".htmlfn($guid->{page});
 		# Store it in pagectime for expiry code to use also.
-		$IkiWiki::pagectime{$guid->{page}}=$mtime;
+		$IkiWiki::pagectime{$guid->{page}}=$mtime
+			unless exists $IkiWiki::pagectime{$guid->{page}};
 	}
 	else {
 		# Dummy value for expiry code.
-		$IkiWiki::pagectime{$guid->{page}}=time;
+		$IkiWiki::pagectime{$guid->{page}}=time
+			unless exists $IkiWiki::pagectime{$guid->{page}};
 	}
 }