summaryrefslogtreecommitdiff
path: root/cpan/Module-Metadata/lib/Module
diff options
context:
space:
mode:
authorKaren Etheridge <ether@cpan.org>2015-09-30 21:30:20 -0700
committerJames E Keenan <jkeenan@cpan.org>2015-10-01 19:48:01 -0400
commit0fa1f7e4e66a455cab6ccf1f9c49f2373c1ced80 (patch)
tree01f6ccaab30a02ae50f13242ae4be46ba54273aa /cpan/Module-Metadata/lib/Module
parent4b89cb47a04366ffd503d523f2fcf2375cec0a8e (diff)
downloadperl-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.pm300
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.