page name to be expired and reused for several distinct guids. When this
happened, the expiry code counted each past guid that had used that page
name as a currently existing page, and thus expired too many pages.
foreach my $feed (values %feeds) {
next unless $feed->{expireage} || $feed->{expirecount};
my $count=0;
+ my %seen;
foreach my $item (sort { $IkiWiki::pagectime{$b->{page}} <=> $IkiWiki::pagectime{$a->{page}} }
- grep { exists $_->{page} && $_->{feed} eq $feed->{name} && $IkiWiki::pagectime{$_->{page}} }
+ grep { exists $_->{page} && ! exists $seen{$_->{page}} && $_->{feed} eq $feed->{name} && $IkiWiki::pagectime{$_->{page}} }
values %guids) {
+ $seen{$item}=1;
if ($feed->{expireage}) {
my $days_old = (time - $IkiWiki::pagectime{$item->{page}}) / 60 / 60 / 24;
if ($days_old > $feed->{expireage}) {
ikiwiki (2.12) UNRELEASED; urgency=low
* Fix some issues with toggles in preview mode.
+ * Fix an aggregate plugin expiry bug. Over time, it's possible for the same
+ page name to be expired and reused for several distinct guids. When this
+ happened, the expiry code counted each past guid that had used that page
+ name as a currently existing page, and thus expired too many pages.
- -- Joey Hess <joeyh@debian.org> Mon, 29 Oct 2007 17:15:04 -0400
+ -- Joey Hess <joeyh@debian.org> Tue, 30 Oct 2007 22:47:36 -0400
ikiwiki (2.11) unstable; urgency=low