Skip to content

Commit b45ecca

Browse files
committed
don't always sort changelog entries
1 parent 29f566b commit b45ecca

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

lib/MetaCPAN/Web/Model/API/Changes.pm

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,37 @@ sub release_changes {
2929
my @releases = _releases($content);
3030

3131
my @changelogs;
32-
while ( my $r = shift @releases ) {
33-
if ( _versions_cmp( $r->{version_parsed}, $version ) == 0 ) {
34-
$r->{current} = 1;
35-
push @changelogs, $r;
36-
if ( $opts{include_dev} ) {
37-
for my $dev_r (@releases) {
38-
last
39-
if !$dev_r->{dev};
40-
push @changelogs, $dev_r;
41-
}
32+
33+
if ( _versions_cmp( $releases[-1]->{version_parsed}, $version ) == 0 )
34+
{
35+
@releases = reverse @releases;
36+
}
37+
elsif (
38+
_versions_cmp( $releases[0]->{version_parsed}, $version ) == 0 )
39+
{
40+
# noop
41+
}
42+
else {
43+
@releases = sort {
44+
_versions_cmp( $b->{version_parsed}, $a->{version_parsed} )
45+
} @releases;
46+
if ( _versions_cmp( $releases[0]->{version_parsed}, $version )
47+
!= 0 )
48+
{
49+
@releases = ();
50+
}
51+
}
52+
53+
if (@releases) {
54+
my $current = shift @releases;
55+
$current->{current} = 1;
56+
push @changelogs, $current;
57+
58+
if ( $opts{include_dev} ) {
59+
for my $dev_r (@releases) {
60+
last
61+
if !$dev_r->{dev};
62+
push @changelogs, $dev_r;
4263
}
4364
}
4465
}
@@ -105,7 +126,6 @@ sub _releases {
105126
= MetaCPAN::Web::Model::API::Changes::Parser->parse($content);
106127

107128
my @releases
108-
= sort { _versions_cmp( $b->{version_parsed}, $a->{version_parsed} ) }
109129
map {
110130
my $v = _parse_version( $_->{version} );
111131
my $trial = $_->{version} =~ /-TRIAL$/

0 commit comments

Comments
 (0)