Skip to content

Commit 53f2b34

Browse files
committed
don't always sort changelog entries
Some changelogs have unusual orders, or have made mistakes with versioning. But most change logs will have the most recent releases at the beginning or the end of the file. If the first or last release found matches the version we are looking for, just use the order of the file as is. Only sort the entries if it isn't found at the start or end.
1 parent 29f566b commit 53f2b34

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

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

Lines changed: 33 additions & 13 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
}
@@ -104,9 +125,8 @@ sub _releases {
104125
my $changelog
105126
= MetaCPAN::Web::Model::API::Changes::Parser->parse($content);
106127

107-
my @releases
108-
= sort { _versions_cmp( $b->{version_parsed}, $a->{version_parsed} ) }
109-
map {
128+
my @releases =
129+
map {;
110130
my $v = _parse_version( $_->{version} );
111131
my $trial = $_->{version} =~ /-TRIAL$/
112132
|| $_->{note} && $_->{note} =~ /\bTRIAL\b/;

0 commit comments

Comments
 (0)