diff --git a/lib/MetaCPAN/Web/Model/API/Changes.pm b/lib/MetaCPAN/Web/Model/API/Changes.pm index 3893a91f88..0317acb3ad 100644 --- a/lib/MetaCPAN/Web/Model/API/Changes.pm +++ b/lib/MetaCPAN/Web/Model/API/Changes.pm @@ -29,16 +29,37 @@ sub release_changes { my @releases = _releases($content); my @changelogs; - while ( my $r = shift @releases ) { - if ( _versions_cmp( $r->{version_parsed}, $version ) == 0 ) { - $r->{current} = 1; - push @changelogs, $r; - if ( $opts{include_dev} ) { - for my $dev_r (@releases) { - last - if !$dev_r->{dev}; - push @changelogs, $dev_r; - } + + if ( _versions_cmp( $releases[-1]->{version_parsed}, $version ) == 0 ) + { + @releases = reverse @releases; + } + elsif ( + _versions_cmp( $releases[0]->{version_parsed}, $version ) == 0 ) + { + # noop + } + else { + @releases = sort { + _versions_cmp( $b->{version_parsed}, $a->{version_parsed} ) + } @releases; + if ( _versions_cmp( $releases[0]->{version_parsed}, $version ) + != 0 ) + { + @releases = (); + } + } + + if (@releases) { + my $current = shift @releases; + $current->{current} = 1; + push @changelogs, $current; + + if ( $opts{include_dev} ) { + for my $dev_r (@releases) { + last + if !$dev_r->{dev}; + push @changelogs, $dev_r; } } } @@ -104,9 +125,8 @@ sub _releases { my $changelog = MetaCPAN::Web::Model::API::Changes::Parser->parse($content); - my @releases - = sort { _versions_cmp( $b->{version_parsed}, $a->{version_parsed} ) } - map { + my @releases = + map {; my $v = _parse_version( $_->{version} ); my $trial = $_->{version} =~ /-TRIAL$/ || $_->{note} && $_->{note} =~ /\bTRIAL\b/;