From 5cbd86235e7993cc067b76105b9ed2e4fbdda3a1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 30 Oct 2007 22:50:44 -0400 Subject: * 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. --- IkiWiki/Plugin/aggregate.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'IkiWiki') diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index 6f9c78075..1add53987 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -220,9 +220,11 @@ sub expire () { #{{{ 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}) { -- cgit v1.2.3