diff options
author | Karen Etheridge <ether@cpan.org> | 2015-09-30 21:30:20 -0700 |
---|---|---|
committer | James E Keenan <jkeenan@cpan.org> | 2015-10-01 19:48:01 -0400 |
commit | 0fa1f7e4e66a455cab6ccf1f9c49f2373c1ced80 (patch) | |
tree | 01f6ccaab30a02ae50f13242ae4be46ba54273aa /cpan/Module-Metadata/lib/Module | |
parent | 4b89cb47a04366ffd503d523f2fcf2375cec0a8e (diff) | |
download | perl-0fa1f7e4e66a455cab6ccf1f9c49f2373c1ced80.tar.gz |
Upgrade Module-Metadata from 1.000027 to 1.000029-TRIAL
1.000029 2015-09-11 16:25:43Z (TRIAL RELEASE)
- fix missing "use" statement in refactored test helper (only affected older
perls, due to other module interactions)
1.000028 2015-09-11 04:24:39Z (TRIAL RELEASE)
- refactored and expanded test cases
- fixed a $VERSION extraction issue on perl 5.6.2 (RT#105978, PR#17)
- fix the detection of package Foo when $Foo::VERSION is set (RT#85961)
from
https://cpan.metacpan.org/authors/id/E/ET/ETHER/Module-Metadata-1.000029-TRIAL.tar.gz
distribution files omitted:
CONTRIBUTING
Changes
INSTALL
LICENSE
MANIFEST
META.json
META.yml
Makefile.PL
README
dist.ini
t/00-report-prereqs.dd
t/00-report-prereqs.t
weaver.ini
xt/author/00-compile.t
xt/author/compat_lc.t
xt/author/eol.t
xt/author/kwalitee.t
xt/author/mojibake.t
xt/author/no-tabs.t
xt/release/changes_has_content.t
xt/release/cpan-changes.t
xt/release/distmeta.t
xt/release/minimum-version.t
xt/release/pod-coverage.t
xt/release/pod-no404s.t
xt/release/pod-syntax.t
xt/release/portability.t
Diffstat (limited to 'cpan/Module-Metadata/lib/Module')
-rw-r--r-- | cpan/Module-Metadata/lib/Module/Metadata.pm | 300 |
1 files changed, 215 insertions, 85 deletions
diff --git a/cpan/Module-Metadata/lib/Module/Metadata.pm b/cpan/Module-Metadata/lib/Module/Metadata.pm index 2fa75c1b4a..3fa404ea23 100644 --- a/cpan/Module-Metadata/lib/Module/Metadata.pm +++ b/cpan/Module-Metadata/lib/Module/Metadata.pm @@ -1,6 +1,7 @@ # -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*- # vim:ts=8:sw=2:et:sta:sts=2 -package Module::Metadata; # git description: v1.000026-12-g9b12bf1 +package Module::Metadata; # git description: v1.000028-4-gb283720 +# ABSTRACT: Gather package and POD information from perl module files # Adapted from Perl-licensed code originally distributed with # Module-Build by Ken Williams @@ -13,7 +14,7 @@ sub __clean_eval { eval $_[0] } use strict; use warnings; -our $VERSION = '1.000027'; +our $VERSION = '1.000029'; # TRIAL use Carp qw/croak/; use File::Spec; @@ -30,7 +31,8 @@ BEGIN { Log::Contextual->import('log_info', '-default_logger' => Log::Contextual::WarnLogger->new({ env_prefix => 'MODULE_METADATA', }), ); - } else { + } + else { *log_info = sub (&) { warn $_[0]->() }; } } @@ -173,10 +175,12 @@ sub new_from_module { if ( defined( $version ) ) { if ( $compare_versions->( $version, '!=', $p->{version} ) ) { $err .= " $p->{file} ($p->{version})\n"; - } else { + } + else { # same version declared multiple times, ignore } - } else { + } + else { $file = $p->{file}; $version = $p->{version}; } @@ -242,7 +246,8 @@ sub new_from_module { if ( $files ) { @files = @$files; - } else { + } + else { find( { wanted => sub { push @files, $_ if -f $_ && /\.pm$/; @@ -272,12 +277,14 @@ sub new_from_module { if ( $package eq $prime_package ) { if ( exists( $prime{$package} ) ) { croak "Unexpected conflict in '$package'; multiple versions found.\n"; - } else { + } + else { $mapped_filename = "$package.pm" if lc("$package.pm") eq lc($mapped_filename); $prime{$package}{file} = $mapped_filename; $prime{$package}{version} = $version if defined( $version ); } - } else { + } + else { push( @{$alt{$package}}, { file => $mapped_filename, version => $version, @@ -304,7 +311,8 @@ sub new_from_module { $result->{err} }; - } elsif ( defined( $result->{version} ) ) { + } + elsif ( defined( $result->{version} ) ) { # There is a primary package selected, and exactly one # alternative package @@ -324,19 +332,22 @@ sub new_from_module { }; } - } else { + } + else { # The prime package selected has no version so, we choose to # use any alternative package that does have a version $prime{$package}{file} = $result->{file}; $prime{$package}{version} = $result->{version}; } - } else { + } + else { # no alt package found with a version, but we have a prime # package so we use it whether it has a version or not } - } else { # No primary package was selected, use the best alternative + } + else { # No primary package was selected, use the best alternative if ( $result->{err} ) { log_info { @@ -408,17 +419,12 @@ sub _init { $self->{module} = shift(@candidates); # punt } else { - if(grep /main/, @{$self->{packages}}) { - $self->{module} = 'main'; - } - else { - $self->{module} = $self->{packages}[0] || ''; - } + $self->{module} = 'main'; } } $self->{version} = $self->{versions}{$self->{module}} - if defined( $self->{module} ); + if defined( $self->{module} ); return $self; } @@ -487,9 +493,11 @@ sub _handle_bom { my $encoding; if ( $buf eq "\x{FE}\x{FF}" ) { $encoding = 'UTF-16BE'; - } elsif ( $buf eq "\x{FF}\x{FE}" ) { + } + elsif ( $buf eq "\x{FF}\x{FE}" ) { $encoding = 'UTF-16LE'; - } elsif ( $buf eq "\x{EF}\x{BB}" ) { + } + elsif ( $buf eq "\x{EF}\x{BB}" ) { $buf = ' '; $count = read $fh, $buf, length $buf; if ( defined $count and $count >= 1 and $buf eq "\x{BF}" ) { @@ -501,7 +509,8 @@ sub _handle_bom { if ( "$]" >= 5.008 ) { binmode( $fh, ":encoding($encoding)" ); } - } else { + } + else { seek $fh, $pos, SEEK_SET or croak( sprintf "Can't reset position to the top of '$filename'" ); } @@ -544,88 +553,91 @@ sub _parse_fh { $pod_data = ''; } $pod_sect = $1; - - } elsif ( $self->{collect_pod} ) { + } + elsif ( $self->{collect_pod} ) { $pod_data .= "$line\n"; - } - - } elsif ( $is_cut ) { - + next; + } + elsif ( $is_cut ) { if ( $self->{collect_pod} && length( $pod_data ) ) { $pod{$pod_sect} = $pod_data; $pod_data = ''; } $pod_sect = ''; + next; + } - } else { + # Skip after __END__ + next if $in_end; - # Skip after __END__ - next if $in_end; + # Skip comments in code + next if $line =~ /^\s*#/; - # Skip comments in code - next if $line =~ /^\s*#/; + # Would be nice if we could also check $in_string or something too + if ($line eq '__END__') { + $in_end++; + next; + } - # Would be nice if we could also check $in_string or something too - if ($line eq '__END__') { - $in_end++; - next; + last if $line eq '__DATA__'; + + # parse $line to see if it's a $VERSION declaration + my( $version_sigil, $version_fullname, $version_package ) = + index($line, 'VERSION') >= 1 + ? $self->_parse_version_expression( $line ) + : (); + + if ( $line =~ /$PKG_REGEXP/o ) { + $package = $1; + my $version = $2; + push( @packages, $package ) unless grep( $package eq $_, @packages ); + $need_vers = defined $version ? 0 : 1; + + if ( not exists $vers{$package} and defined $version ){ + # Upgrade to a version object. + my $dwim_version = eval { _dwim_version($version) }; + croak "Version '$version' from $self->{filename} does not appear to be valid:\n$line\n\nThe fatal error was: $@\n" + unless defined $dwim_version; # "0" is OK! + $vers{$package} = $dwim_version; } - last if $line eq '__DATA__'; - - # parse $line to see if it's a $VERSION declaration - my( $version_sigil, $version_fullname, $version_package ) = - index($line, 'VERSION') >= 1 - ? $self->_parse_version_expression( $line ) - : (); - - if ( $line =~ /$PKG_REGEXP/o ) { - $package = $1; - my $version = $2; - push( @packages, $package ) unless grep( $package eq $_, @packages ); - $need_vers = defined $version ? 0 : 1; - - if ( not exists $vers{$package} and defined $version ){ - # Upgrade to a version object. - my $dwim_version = eval { _dwim_version($version) }; - croak "Version '$version' from $self->{filename} does not appear to be valid:\n$line\n\nThe fatal error was: $@\n" - unless defined $dwim_version; # "0" is OK! - $vers{$package} = $dwim_version; - } + } - # VERSION defined with full package spec, i.e. $Module::VERSION - } elsif ( $version_fullname && $version_package ) { - push( @packages, $version_package ) unless grep( $version_package eq $_, @packages ); - $need_vers = 0 if $version_package eq $package; + # VERSION defined with full package spec, i.e. $Module::VERSION + elsif ( $version_fullname && $version_package ) { + # we do NOT save this package in found @packages + $need_vers = 0 if $version_package eq $package; - unless ( defined $vers{$version_package} && length $vers{$version_package} ) { + unless ( defined $vers{$version_package} && length $vers{$version_package} ) { $vers{$version_package} = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line ); } + } - # first non-comment line in undeclared package main is VERSION - } elsif ( $package eq 'main' && $version_fullname && !exists($vers{main}) ) { - $need_vers = 0; - my $v = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line ); - $vers{$package} = $v; - push( @packages, 'main' ); + # first non-comment line in undeclared package main is VERSION + elsif ( $package eq 'main' && $version_fullname && !exists($vers{main}) ) { + $need_vers = 0; + my $v = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line ); + $vers{$package} = $v; + push( @packages, 'main' ); + } - # first non-comment line in undeclared package defines package main - } elsif ( $package eq 'main' && !exists($vers{main}) && $line =~ /\w/ ) { - $need_vers = 1; - $vers{main} = ''; - push( @packages, 'main' ); + # first non-comment line in undeclared package defines package main + elsif ( $package eq 'main' && !exists($vers{main}) && $line =~ /\w/ ) { + $need_vers = 1; + $vers{main} = ''; + push( @packages, 'main' ); + } - # only keep if this is the first $VERSION seen - } elsif ( $version_fullname && $need_vers ) { - $need_vers = 0; - my $v = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line ); + # only keep if this is the first $VERSION seen + elsif ( $version_fullname && $need_vers ) { + $need_vers = 0; + my $v = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line ); - unless ( defined $vers{$package} && length $vers{$package} ) { - $vers{$package} = $v; - } + unless ( defined $vers{$package} && length $vers{$package} ) { + $vers{$package} = $v; } } - } + } # end loop over each line if ( $self->{collect_pod} && length($pod_data) ) { $pod{$pod_sect} = $pod_data; @@ -652,7 +664,8 @@ sub _evaluate_version_line { sub { local $sigil$variable_name; $line; - \$$variable_name + return \$$variable_name if defined \$$variable_name; + return \$Module::Metadata::_version::p${pn}::$variable_name; }; }; @@ -763,7 +776,8 @@ sub version { if ( defined( $mod ) && length( $mod ) && exists( $self->{versions}{$mod} ) ) { return $self->{versions}{$mod}; - } else { + } + else { return undef; } } @@ -774,7 +788,8 @@ sub pod { if ( defined( $sect ) && length( $sect ) && exists( $self->{pod}{$sect} ) ) { return $self->{pod}{$sect}; - } else { + } + else { return undef; } } @@ -793,10 +808,20 @@ sub is_indexable { 1; +__END__ + +=pod + +=encoding UTF-8 + =head1 NAME Module::Metadata - Gather package and POD information from perl module files +=head1 VERSION + +version 1.000029 + =head1 SYNOPSIS use Module::Metadata; @@ -996,11 +1021,24 @@ Returns the POD data in the given section. =head2 C<< is_indexable($package) >> or C<< is_indexable() >> +Available since version 1.000020. + Returns a boolean indicating whether the package (if provided) or any package (otherwise) is eligible for indexing by PAUSE, the Perl Authors Upload Server. Note This only checks for valid C<package> declarations, and does not take any ownership information into account. +=head1 SUPPORT + +Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Metadata> +(or L<bug-Module-Metadata@rt.cpan.org|mailto:bug-Module-Metadata@rt.cpan.org>). + +There is also a mailing list available for users of this distribution, at +http://lists.perl.org/list/cpan-workers.html. + +There is also an irc channel available for users of this distribution, at +irc://irc.perl.org/#toolchain. + =head1 AUTHOR Original code from Module::Build::ModuleInfo by Ken Williams @@ -1009,6 +1047,98 @@ Original code from Module::Build::ModuleInfo by Ken Williams Released as Module::Metadata by Matt S Trout (mst) <mst@shadowcat.co.uk> with assistance from David Golden (xdg) <dagolden@cpan.org>. +=head1 CONTRIBUTORS + +=for stopwords Karen Etheridge David Golden Vincent Pit Matt S Trout Chris Nehren Graham Knop Olivier Mengué Tomas Doran Tatsuhiko Miyagawa tokuhirom Peter Rabbitson Jerry D. Hedden Craig A. Berry Mitchell Steinbrunner Edward Zborowski Gareth Harper James Raspass 'BinGOs' Williams Josh Jore Kent Fredric + +=over 4 + +=item * + +Karen Etheridge <ether@cpan.org> + +=item * + +David Golden <dagolden@cpan.org> + +=item * + +Vincent Pit <perl@profvince.com> + +=item * + +Matt S Trout <mst@shadowcat.co.uk> + +=item * + +Chris Nehren <apeiron@cpan.org> + +=item * + +Graham Knop <haarg@haarg.org> + +=item * + +Olivier Mengué <dolmen@cpan.org> + +=item * + +Tomas Doran <bobtfish@bobtfish.net> + +=item * + +Tatsuhiko Miyagawa <miyagawa@bulknews.net> + +=item * + +tokuhirom <tokuhirom@gmail.com> + +=item * + +Peter Rabbitson <ribasushi@cpan.org> + +=item * + +Jerry D. Hedden <jdhedden@cpan.org> + +=item * + +Craig A. Berry <cberry@cpan.org> + +=item * + +David Mitchell <davem@iabyn.com> + +=item * + +David Steinbrunner <dsteinbrunner@pobox.com> + +=item * + +Edward Zborowski <ed@rubensteintech.com> + +=item * + +Gareth Harper <gareth@broadbean.com> + +=item * + +James Raspass <jraspass@gmail.com> + +=item * + +Chris 'BinGOs' Williams <chris@bingosnet.co.uk> + +=item * + +Josh Jore <jjore@cpan.org> + +=item * + +Kent Fredric <kentnl@cpan.org> + +=back + =head1 COPYRIGHT & LICENSE Original code Copyright (c) 2001-2011 Ken Williams. |