Commit | Line | Data |
---|---|---|
603f4ea0 DG |
1 | #!perl |
2 | use 5.010; | |
3 | use strict; | |
4 | use warnings; | |
5 | use lib 'Porting'; | |
6 | use Maintainers qw/%Modules/; | |
7 | use Module::CoreList; | |
8 | ||
88e14305 DG |
9 | my $deprecated; |
10 | ||
11 | #--------------------------------------------------------------------------# | |
12 | ||
13 | sub added { | |
14 | my ($mod, $old_v, $new_v) = @_; | |
15 | say "=item C<$mod>\n"; | |
16 | say "Version $new_v has been added to the Perl core.\n"; | |
17 | } | |
18 | ||
19 | sub updated { | |
20 | my ($mod, $old_v, $new_v) = @_; | |
21 | say "=item C<$mod>\n"; | |
22 | say "Upgraded from version $old_v to $new_v.\n"; | |
23 | if ( $deprecated->{$mod} ) { | |
24 | say "NOTE: C<$mod> is deprecated and may be removed from a future version of Perl.\n"; | |
25 | } | |
26 | } | |
27 | ||
28 | sub removed { | |
29 | my ($mod, $old_v, $new_v) = @_; | |
30 | say "=item C<$mod>\n"; | |
31 | say "Removed from the Perl core. Prior version was $old_v.\n"; | |
32 | } | |
33 | ||
34 | sub generate_section { | |
35 | my ($title, $item_sub, @mods ) = @_; | |
36 | return unless @mods; | |
37 | ||
38 | say "=head2 $title\n"; | |
39 | say "=over 4\n"; | |
40 | ||
41 | for my $tuple ( sort { lc($a->[0]) cmp lc($b->[0]) } @mods ) { | |
42 | my ($mod,$old_v,$new_v) = @$tuple; | |
43 | $old_v //= q('undef'); | |
44 | $new_v //= q('undef'); | |
45 | $item_sub->($mod, $old_v, $new_v); | |
46 | } | |
47 | ||
48 | say "=back\n"; | |
49 | } | |
50 | ||
51 | #--------------------------------------------------------------------------# | |
52 | ||
603f4ea0 DG |
53 | my $corelist = \%Module::CoreList::version; |
54 | my @versions = sort keys %$corelist; | |
55 | ||
56 | # by default, compare latest two version in CoreList; | |
57 | my ($old, $new) = @ARGV; | |
58 | $old ||= $versions[-2]; | |
59 | $new ||= $versions[-1]; | |
60 | ||
88e14305 | 61 | $deprecated = $Module::CoreList::deprecated{$new}; |
603f4ea0 | 62 | |
88e14305 DG |
63 | my (@new,@deprecated,@removed,@pragmas,@modules); |
64 | ||
65 | # %Modules defines what is currently in core | |
66 | for my $k ( keys %Modules ) { | |
67 | next unless exists $corelist->{$new}{$k}; | |
68 | my $old_ver = $corelist->{$old}{$k}; | |
69 | my $new_ver = $corelist->{$new}{$k}; | |
70 | # in core but not in last corelist | |
71 | if ( ! exists $corelist->{$old}{$k} ) { | |
72 | push @new, [$k, undef, $new_ver]; | |
73 | } | |
74 | # otherwise just pragmas or modules | |
75 | else { | |
76 | my $old_ver = $corelist->{$old}{$k}; | |
77 | my $new_ver = $corelist->{$new}{$k}; | |
78 | next unless defined $old_ver && defined $new_ver && $old_ver ne $new_ver; | |
79 | my $tuple = [ $k, $old_ver, $new_ver ]; | |
80 | if ( $k eq lc $k ) { | |
81 | push @pragmas, $tuple; | |
82 | } | |
83 | else { | |
84 | push @modules, $tuple; | |
85 | } | |
86 | } | |
603f4ea0 DG |
87 | } |
88 | ||
88e14305 DG |
89 | # in old corelist, but not this one => removed |
90 | # N.B. This is exhaustive -- not just what's in %Modules, so modules removed from | |
91 | # distributions will show up here, too. Some person will have to review to see what's | |
92 | # important. That's the best we can do without a historical Maintainers.pl | |
93 | for my $k ( keys %{ $corelist->{$old} } ) { | |
94 | if ( ! exists $corelist->{$new}{$k} ) { | |
95 | push @removed, [$k, $corelist->{$old}{$k}, undef]; | |
96 | } | |
97 | } | |
98 | ||
99 | generate_section("New Modules and Pragmata", \&added, @new); | |
100 | generate_section("Pragmata Changes", \&updated, @pragmas); | |
101 | generate_section("Updated Modules", \&updated, @modules); | |
102 | generate_section("Removed Modules and Pragmata", \&removed, @removed); | |
103 |