In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/eab82fd6486ac0971d2f1b8800432a3b8f0b315c?hp=b4b2fefd8bdd72b0f88245101f270e9dc39568f6>
- Log ----------------------------------------------------------------- commit eab82fd6486ac0971d2f1b8800432a3b8f0b315c Merge: b4b2fef 5730025 Author: Chris 'BinGOs' Williams <[email protected]> Date: Tue May 21 13:32:53 2013 +0100 Merge branch 'smoke-me/coreutils' into blead ----------------------------------------------------------------------- Summary of changes: dist/Module-CoreList/lib/Module/CoreList/Utils.pm | 854 +++++++++++++++++++++ dist/Module-CoreList/t/utils.t | 23 + 2 files changed, 877 insertions(+), 0 deletions(-) create mode 100644 dist/Module-CoreList/lib/Module/CoreList/Utils.pm create mode 100644 dist/Module-CoreList/t/utils.t diff --git a/dist/Module-CoreList/lib/Module/CoreList/Utils.pm b/dist/Module-CoreList/lib/Module/CoreList/Utils.pm new file mode 100644 index 0000000..a04ef6c --- /dev/null +++ b/dist/Module-CoreList/lib/Module/CoreList/Utils.pm @@ -0,0 +1,854 @@ +package Module::CoreList::Utils; + +use strict; +use warnings; +use vars qw[$VERSION %utilities]; +use Module::CoreList; +use Module::CoreList::TieHashDelta; + +$VERSION = '2.91'; + +sub utilities { + my $perl = shift; + $perl = shift if eval { $perl->isa(__PACKAGE__) }; + return unless $perl or exists $utilities{$perl}; + return sort keys %{ $utilities{$perl} }; +} + +sub first_release_raw { + my $util = shift; + $util = shift if eval { $util->isa(__PACKAGE__) }; + #and scalar @_ and $_[0] =~ m#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z#; + my $version = shift; + + my @perls = $version + ? grep { exists $utilities{$_}{ $util } && + $utilities{$_}{ $util } ge $version } keys %utilities + : grep { exists $utilities{$_}{ $util } } keys %utilities; + + return grep { exists $Module::CoreList::released{$_} } @perls; +} + +sub first_release_by_date { + my @perls = &first_release_raw; + return unless @perls; + return (sort { $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} } @perls)[0]; +} + +sub first_release { + my @perls = &first_release_raw; + return unless @perls; + return (sort { $a cmp $b } @perls)[0]; +} + +sub removed_from { + my @perls = &removed_raw; + return shift @perls; +} + +sub removed_from_by_date { + my @perls = sort { $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} } &removed_raw; + return shift @perls; +} + +sub removed_raw { + my $util = shift; + $util = shift if eval { $util->isa(__PACKAGE__) }; + return unless my @perls = sort { $a cmp $b } first_release_raw($util); + @perls = grep { exists $Module::CoreList::released{$_} } @perls; + my $last = pop @perls; + my @removed = grep { $_ > $last } sort { $a cmp $b } keys %utilities; + return @removed; +} + +my %delta = ( + 5 => { + changed => { + 'a2p' => '1', + 'c2ph' => '1', + 'cppstdin' => '1', + 'find2perl' => '1', + 'pstruct' => '1', + 's2p' => '1', + }, + removed => { + } + }, + + 5.001 => { + delta_from => 5, + changed => { + 'h2xs' => '1', + }, + removed => { + } + }, + + 5.002 => { + delta_from => 5.001, + changed => { + 'h2ph' => '1', + 'perlbug' => '1', + 'perldoc' => '1', + 'pod2html' => '1', + 'pod2latex' => '1', + 'pod2man' => '1', + 'pod2text' => '1', + }, + removed => { + } + }, + + 5.00307 => { + delta_from => 5.002, + changed => { + 'pl2pm' => '1', + }, + removed => { + 'cppstdin' => 1, + 'pstruct' => 1, + } + }, + + 5.004 => { + delta_from => 5.00307, + changed => { + 'splain' => '1', + }, + removed => { + } + }, + + 5.005 => { + delta_from => 5.00405, + changed => { + 'perlcc' => '1', + }, + removed => { + } + }, + + 5.00503 => { + delta_from => 5.005, + changed => { + }, + removed => { + } + }, + + 5.00405 => { + delta_from => 5.004, + changed => { + }, + removed => { + } + }, + + 5.006 => { + delta_from => 5.00504, + changed => { + 'dprofpp' => '1', + 'pod2usage' => '1', + 'podchecker' => '1', + 'podselect' => '1', + 'pstruct' => '1', + }, + removed => { + } + }, + + 5.006001 => { + delta_from => 5.006, + changed => { + }, + removed => { + } + }, + + 5.007003 => { + delta_from => 5.006002, + changed => { + 'libnetcfg' => '1', + 'perlivp' => '1', + 'psed' => '1', + 'xsubpp' => '1', + }, + removed => { + } + }, + + 5.008 => { + delta_from => 5.007003, + changed => { + 'enc2xs' => '1', + 'piconv' => '1', + }, + removed => { + } + }, + + 5.008001 => { + delta_from => 5.008, + changed => { + 'cpan' => '1', + }, + removed => { + } + }, + + 5.009 => { + delta_from => 5.008009, + changed => { + }, + removed => { + 'corelist' => 1, + 'instmodsh' => 1, + 'prove' => 1, + } + }, + + 5.008002 => { + delta_from => 5.008001, + changed => { + }, + removed => { + } + }, + + 5.006002 => { + delta_from => 5.006001, + changed => { + }, + removed => { + } + }, + + 5.008003 => { + delta_from => 5.008002, + changed => { + 'instmodsh' => '1', + 'prove' => '1', + }, + removed => { + } + }, + + 5.00504 => { + delta_from => 5.00503, + changed => { + }, + removed => { + } + }, + + 5.009001 => { + delta_from => 5.009, + changed => { + 'instmodsh' => '1', + 'prove' => '1', + }, + removed => { + } + }, + + 5.008004 => { + delta_from => 5.008003, + changed => { + }, + removed => { + } + }, + + 5.008005 => { + delta_from => 5.008004, + changed => { + }, + removed => { + } + }, + + 5.008006 => { + delta_from => 5.008005, + changed => { + }, + removed => { + } + }, + + 5.009002 => { + delta_from => 5.009001, + changed => { + 'corelist' => '1', + }, + removed => { + } + }, + + 5.008007 => { + delta_from => 5.008006, + changed => { + }, + removed => { + } + }, + + 5.009003 => { + delta_from => 5.009002, + changed => { + 'ptar' => '1', + 'ptardiff' => '1', + 'shasum' => '1', + }, + removed => { + } + }, + + 5.008008 => { + delta_from => 5.008007, + changed => { + }, + removed => { + } + }, + + 5.009004 => { + delta_from => 5.009003, + changed => { + 'config_data' => '1', + }, + removed => { + } + }, + + 5.009005 => { + delta_from => 5.009004, + changed => { + 'cpan2dist' => '1', + 'cpanp' => '1', + 'cpanp-run-perl' => '1', + }, + removed => { + 'perlcc' => 1, + } + }, + + 5.010000 => { + delta_from => 5.009005, + changed => { + }, + removed => { + } + }, + + 5.008009 => { + delta_from => 5.008008, + changed => { + 'corelist' => '1', + }, + removed => { + } + }, + + 5.010001 => { + delta_from => 5.010000, + changed => { + }, + removed => { + } + }, + + 5.011 => { + delta_from => 5.010001, + changed => { + }, + removed => { + } + }, + + 5.011001 => { + delta_from => 5.011, + changed => { + }, + removed => { + } + }, + + 5.011002 => { + delta_from => 5.011001, + changed => { + 'perlthanks' => '1', + }, + removed => { + } + }, + + 5.011003 => { + delta_from => 5.011002, + changed => { + }, + removed => { + } + }, + + 5.011004 => { + delta_from => 5.011003, + changed => { + }, + removed => { + } + }, + + 5.011005 => { + delta_from => 5.011004, + changed => { + }, + removed => { + } + }, + + 5.012 => { + delta_from => 5.011005, + changed => { + }, + removed => { + } + }, + + 5.013 => { + delta_from => 5.012005, + changed => { + }, + removed => { + } + }, + + 5.012001 => { + delta_from => 5.012, + changed => { + }, + removed => { + } + }, + + 5.013001 => { + delta_from => 5.013, + changed => { + }, + removed => { + } + }, + + 5.013002 => { + delta_from => 5.013001, + changed => { + }, + removed => { + } + }, + + 5.013003 => { + delta_from => 5.013002, + changed => { + }, + removed => { + } + }, + + 5.013004 => { + delta_from => 5.013003, + changed => { + }, + removed => { + } + }, + + 5.012002 => { + delta_from => 5.012001, + changed => { + }, + removed => { + } + }, + + 5.013005 => { + delta_from => 5.013004, + changed => { + }, + removed => { + } + }, + + 5.013006 => { + delta_from => 5.013005, + changed => { + }, + removed => { + } + }, + + 5.013007 => { + delta_from => 5.013006, + changed => { + 'ptargrep' => '1', + }, + removed => { + } + }, + + 5.013008 => { + delta_from => 5.013007, + changed => { + }, + removed => { + } + }, + + 5.013009 => { + delta_from => 5.013008, + changed => { + 'json_pp' => '1', + }, + removed => { + } + }, + + 5.012003 => { + delta_from => 5.012002, + changed => { + }, + removed => { + } + }, + + 5.013010 => { + delta_from => 5.013009, + changed => { + }, + removed => { + } + }, + + 5.013011 => { + delta_from => 5.013010, + changed => { + }, + removed => { + } + }, + + 5.014 => { + delta_from => 5.013011, + changed => { + }, + removed => { + } + }, + + 5.014001 => { + delta_from => 5.014, + changed => { + }, + removed => { + } + }, + + 5.015 => { + delta_from => 5.014004, + changed => { + }, + removed => { + 'dprofpp' => 1, + } + }, + + 5.012004 => { + delta_from => 5.012003, + changed => { + }, + removed => { + } + }, + + 5.015001 => { + delta_from => 5.015, + changed => { + }, + removed => { + } + }, + + 5.015002 => { + delta_from => 5.015001, + changed => { + }, + removed => { + } + }, + + 5.015003 => { + delta_from => 5.015002, + changed => { + }, + removed => { + } + }, + + 5.014002 => { + delta_from => 5.014001, + changed => { + }, + removed => { + } + }, + + 5.015004 => { + delta_from => 5.015003, + changed => { + }, + removed => { + } + }, + + 5.015005 => { + delta_from => 5.015004, + changed => { + }, + removed => { + } + }, + + 5.015006 => { + delta_from => 5.015005, + changed => { + 'zipdetails' => '1', + }, + removed => { + } + }, + + 5.015007 => { + delta_from => 5.015006, + changed => { + }, + removed => { + } + }, + + 5.015008 => { + delta_from => 5.015007, + changed => { + }, + removed => { + } + }, + + 5.015009 => { + delta_from => 5.015008, + changed => { + }, + removed => { + } + }, + + 5.016 => { + delta_from => 5.015009, + changed => { + }, + removed => { + } + }, + + 5.017 => { + delta_from => 5.016003, + changed => { + }, + removed => { + } + }, + + 5.017001 => { + delta_from => 5.017, + changed => { + }, + removed => { + } + }, + + 5.017002 => { + delta_from => 5.017001, + changed => { + }, + removed => { + } + }, + + 5.016001 => { + delta_from => 5.016, + changed => { + }, + removed => { + } + }, + + 5.017003 => { + delta_from => 5.017002, + changed => { + }, + removed => { + } + }, + + 5.017004 => { + delta_from => 5.017003, + changed => { + }, + removed => { + } + }, + + 5.014003 => { + delta_from => 5.014002, + changed => { + }, + removed => { + } + }, + + 5.017005 => { + delta_from => 5.017004, + changed => { + }, + removed => { + } + }, + + 5.016002 => { + delta_from => 5.016001, + changed => { + }, + removed => { + } + }, + + 5.012005 => { + delta_from => 5.012004, + changed => { + }, + removed => { + } + }, + + 5.017006 => { + delta_from => 5.017005, + changed => { + }, + removed => { + } + }, + + 5.017007 => { + delta_from => 5.017006, + changed => { + }, + removed => { + } + }, + + 5.017008 => { + delta_from => 5.017007, + changed => { + }, + removed => { + } + }, + + 5.017009 => { + delta_from => 5.017008, + changed => { + }, + removed => { + } + }, + + 5.014004 => { + delta_from => 5.014003, + changed => { + }, + removed => { + } + }, + + 5.016003 => { + delta_from => 5.016002, + changed => { + }, + removed => { + } + }, + + 5.017010 => { + delta_from => 5.017009, + changed => { + }, + removed => { + } + }, + + 5.017011 => { + delta_from => 5.017010, + changed => { + }, + removed => { + } + }, + 5.018000 => { + delta_from => 5.017011, + changed => { + }, + removed => { + } + }, + 5.019000 => { + delta_from => 5.018000, + changed => { + }, + removed => { + 'cpan2dist' => '1', + 'cpanp' => '1', + 'cpanp-run-perl' => '1', + 'pod2latex' => '1', + } + }, +); + +for my $version (sort { $a <=> $b } keys %delta) { + my $data = $delta{$version}; + + tie %{$utilities{$version}}, 'Module::CoreList::TieHashDelta', + $data->{changed}, $data->{removed}, + $data->{delta_from} ? $utilities{$data->{delta_from}} : undef; +} + +# Create aliases with trailing zeros for $] use + +$utilities{'5.000'} = $utilities{5}; + +_create_aliases(\%utilities); + +sub _create_aliases { + my ($hash) = @_; + + for my $version (keys %$hash) { + next unless $version >= 5.010; + + my $padded = sprintf "%0.6f", $version; + + # If the version in string form isn't the same as the numeric version, + # alias it. + if ($padded ne $version && $version == $padded) { + $hash->{$padded} = $hash->{$version}; + } + } +} + +'foo'; diff --git a/dist/Module-CoreList/t/utils.t b/dist/Module-CoreList/t/utils.t new file mode 100644 index 0000000..4822495 --- /dev/null +++ b/dist/Module-CoreList/t/utils.t @@ -0,0 +1,23 @@ +use strict; +use warnings; +use Test::More tests => 9; + +BEGIN { require_ok('Module::CoreList::Utils'); } + +ok( defined $Module::CoreList::Utils::utilities{5}{a2p}, '5 had a2p' ); +is( Module::CoreList::Utils->first_release('a2p'), 5, 'a2p first released in 5' ); +is( Module::CoreList::Utils::first_release('a2p'), 5, 'a2p first released in 5' ); +is( Module::CoreList::Utils->first_release('corelist'), 5.008009, 'corelist with v5.8.9'); +is( Module::CoreList::Utils->first_release_by_date('corelist'), 5.009002, 'corelist with v5.9.2'); +is( Module::CoreList::Utils::first_release_by_date('corelist'), 5.009002, 'corelist with v5.9.2'); +{ + my @expected = qw(a2p c2ph cppstdin find2perl h2xs pstruct s2p); + { + my @foo = Module::CoreList::Utils->utilities(5.001); + is_deeply( \@foo, \@expected, '5.001 utils all present and correct' ); + } + { + my @foo = Module::CoreList::Utils::utilities(5.001); + is_deeply( \@foo, \@expected, '5.001 utils all present and correct' ); + } +} -- Perl5 Master Repository
