r35594 - in /trunk/libparse-cpan-meta-perl: ./ debian/ lib/Parse/CPAN/ t/ t/data/ t/lib/Parse/CPAN/Meta/
ryan52-guest at users.alioth.debian.org
ryan52-guest at users.alioth.debian.org
Sun May 17 20:33:59 UTC 2009
Author: ryan52-guest
Date: Sun May 17 20:33:53 2009
New Revision: 35594
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=35594
Log:
* New upstream release
* Add myself to Uploaders
Added:
trunk/libparse-cpan-meta-perl/.dualLivedDiffConfig
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/.dualLivedDiffConfig
trunk/libparse-cpan-meta-perl/LICENSE
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/LICENSE
trunk/libparse-cpan-meta-perl/README
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/README
trunk/libparse-cpan-meta-perl/t/05_export.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/05_export.t
trunk/libparse-cpan-meta-perl/t/18_tap.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/18_tap.t
trunk/libparse-cpan-meta-perl/t/19_errors.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/19_errors.t
trunk/libparse-cpan-meta-perl/t/21_bom.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/21_bom.t
trunk/libparse-cpan-meta-perl/t/97_meta.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/97_meta.t
trunk/libparse-cpan-meta-perl/t/98_pod.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/98_pod.t
trunk/libparse-cpan-meta-perl/t/99_pmv.t
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/99_pmv.t
trunk/libparse-cpan-meta-perl/t/data/Spreadsheet-Read.yml
- copied unchanged from r35593, branches/upstream/libparse-cpan-meta-perl/current/t/data/Spreadsheet-Read.yml
Modified:
trunk/libparse-cpan-meta-perl/Changes
trunk/libparse-cpan-meta-perl/MANIFEST
trunk/libparse-cpan-meta-perl/META.yml
trunk/libparse-cpan-meta-perl/Makefile.PL
trunk/libparse-cpan-meta-perl/debian/changelog
trunk/libparse-cpan-meta-perl/debian/control
trunk/libparse-cpan-meta-perl/lib/Parse/CPAN/Meta.pm
trunk/libparse-cpan-meta-perl/t/02_basic.t
trunk/libparse-cpan-meta-perl/t/03_regression.t
trunk/libparse-cpan-meta-perl/t/11_meta_yml.t
trunk/libparse-cpan-meta-perl/t/12_plagger.t
trunk/libparse-cpan-meta-perl/t/13_perl_smith.t
trunk/libparse-cpan-meta-perl/t/14_yaml_org.t
trunk/libparse-cpan-meta-perl/t/15_multibyte.t
trunk/libparse-cpan-meta-perl/t/17_toolbar.t
trunk/libparse-cpan-meta-perl/t/lib/Parse/CPAN/Meta/Test.pm
Modified: trunk/libparse-cpan-meta-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/Changes?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/Changes (original)
+++ trunk/libparse-cpan-meta-perl/Changes Sun May 17 20:33:53 2009
@@ -1,4 +1,12 @@
Revision history for Perl extension Parse-CPAN-Meta
+
+1.38 Sat 16 May 2009
+ - Synchorised version numbers with YAML::Tiny
+ - Code shrinkages to the bloaty Unicode/BOM code
+ - Merging a ton more tests from YAML::Tiny
+ - Added back some pointless options to yaml_ok that keep our
+ codebase closer to YAML::Tiny (which should help with syncing)
+ - Changed exceptions to be closer to YAML::Tiny
0.05 Wed 11 Mar 2009
- Upgrade previous release to a stable release.
Modified: trunk/libparse-cpan-meta-perl/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/MANIFEST?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/MANIFEST (original)
+++ trunk/libparse-cpan-meta-perl/MANIFEST Sun May 17 20:33:53 2009
@@ -1,11 +1,15 @@
+.dualLivedDiffConfig
Changes
lib/Parse/CPAN/Meta.pm
+LICENSE
Makefile.PL
MANIFEST This list of files
+README
t/01_compile.t
t/02_basic.t
t/03_regression.t
t/04_scalar.t
+t/05_export.t
t/11_meta_yml.t
t/12_plagger.t
t/13_perl_smith.t
@@ -13,9 +17,16 @@
t/15_multibyte.t
t/16_nullrefs.t
t/17_toolbar.t
+t/18_tap.t
+t/19_errors.t
+t/21_bom.t
+t/97_meta.t
+t/98_pod.t
+t/99_pmv.t
t/data/HTML-WebDAO.yml
t/data/multibyte.yml
t/data/sample.yml
+t/data/Spreadsheet-Read.yml
t/data/Template-Provider-Unicode-Japanese.yml
t/data/toolbar.yml
t/data/utf_16_le_bom.yml
Modified: trunk/libparse-cpan-meta-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/META.yml?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/META.yml (original)
+++ trunk/libparse-cpan-meta-perl/META.yml Sun May 17 20:33:53 2009
@@ -1,15 +1,23 @@
--- #YAML:1.0
-name: Parse-CPAN-Meta
-version: 0.05
-abstract: Parse META.yml and other similar CPAN metadata files
-license: perl
-author:
+name: Parse-CPAN-Meta
+version: 1.38
+abstract: Parse META.yml and other similar CPAN metadata files
+author:
- Adam Kennedy <adamk at cpan.org>
-generated_by: ExtUtils::MakeMaker version 6.42
-distribution_type: module
-requires:
- File::Spec: 0.80
- Test::More: 0.47
+license: perl
+distribution_type: module
+configure_requires:
+ ExtUtils::MakeMaker: 0
+build_requires:
+ ExtUtils::MakeMaker: 0
+requires:
+ File::Spec: 0.80
+ Test::More: 0.47
+no_index:
+ directory:
+ - t
+ - inc
+generated_by: ExtUtils::MakeMaker version 6.50
meta-spec:
- url: http://module-build.sourceforge.net/META-spec-v1.3.html
- version: 1.3
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
Modified: trunk/libparse-cpan-meta-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/Makefile.PL?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/Makefile.PL (original)
+++ trunk/libparse-cpan-meta-perl/Makefile.PL Sun May 17 20:33:53 2009
@@ -1,7 +1,7 @@
use strict;
BEGIN {
require 5.003_96;
- $main::VERSION = '0.05';
+ $main::VERSION = '1.38';
}
use ExtUtils::MakeMaker;
Modified: trunk/libparse-cpan-meta-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/debian/changelog?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/debian/changelog (original)
+++ trunk/libparse-cpan-meta-perl/debian/changelog Sun May 17 20:33:53 2009
@@ -1,3 +1,10 @@
+libparse-cpan-meta-perl (1.38-1) UNRELEASED; urgency=low
+
+ * New upstream release
+ * Add myself to Uploaders
+
+ -- Ryan Niebur <ryanryan52 at gmail.com> Sun, 17 May 2009 13:33:44 -0700
+
libparse-cpan-meta-perl (0.05-1) unstable; urgency=low
* New upstream release.
Modified: trunk/libparse-cpan-meta-perl/debian/control
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/debian/control?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/debian/control (original)
+++ trunk/libparse-cpan-meta-perl/debian/control Sun May 17 20:33:53 2009
@@ -9,7 +9,7 @@
Maintainer: Debian Perl Group <pkg-perl-maintainers at lists.alioth.debian.org>
Uploaders: Vincent Danjean <vdanjean at debian.org>,
Brian Cassidy <brian.cassidy at gmail.com>,
- gregor herrmann <gregoa at debian.org>
+ gregor herrmann <gregoa at debian.org>, Ryan Niebur <ryanryan52 at gmail.com>
Standards-Version: 3.8.1
Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libparse-cpan-meta-perl/
Vcs-Browser: http://svn.debian.org/viewsvn/pkg-perl/trunk/libparse-cpan-meta-perl/
Modified: trunk/libparse-cpan-meta-perl/lib/Parse/CPAN/Meta.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/lib/Parse/CPAN/Meta.pm?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/lib/Parse/CPAN/Meta.pm (original)
+++ trunk/libparse-cpan-meta-perl/lib/Parse/CPAN/Meta.pm Sun May 17 20:33:53 2009
@@ -2,10 +2,20 @@
use strict;
use Carp 'croak';
+
+# UTF Support?
+sub HAVE_UTF8 () { $] >= 5.007003 }
BEGIN {
+ if ( HAVE_UTF8 ) {
+ # The string eval helps hide this from Test::MinimumVersion
+ eval "require utf8;";
+ die "Failed to load UTF-8 support" if $@;
+ }
+
+ # Class structure
require 5.004;
require Exporter;
- $Parse::CPAN::Meta::VERSION = '0.05';
+ $Parse::CPAN::Meta::VERSION = '1.38';
@Parse::CPAN::Meta::ISA = qw{ Exporter };
@Parse::CPAN::Meta::EXPORT_OK = qw{ Load LoadFile };
}
@@ -25,19 +35,7 @@
);
-my %BOM = (
- "\357\273\277" => 'UTF-8',
- "\376\377" => 'UTF-16BE',
- "\377\376" => 'UTF-16LE',
- "\0\0\376\377" => 'UTF-32BE',
- "\377\376\0\0" => 'UTF-32LE'
-);
-
-sub BOM_MIN_LENGTH () { 2 }
-sub BOM_MAX_LENGTH () { 4 }
-sub HAVE_UTF8 () { $] >= 5.007003 }
-
-BEGIN { require utf8 if HAVE_UTF8 }
+
#####################################################################
@@ -54,9 +52,14 @@
# Slurp in the file
local $/ = undef;
- open( CFG, $file ) or croak("Failed to open file '$file': $!");
+ local *CFG;
+ unless ( open( CFG, $file ) ) {
+ croak("Failed to open file '$file': $!");
+ }
my $yaml = <CFG>;
- close CFG or croak("Failed to close file '$file': $!");
+ unless ( close(CFG) ) {
+ croak("Failed to close file '$file': $!");
+ }
# Hand off to the actual parser
Load( $yaml );
@@ -65,49 +68,54 @@
# Parse a document from a string.
# Doing checks on $_[0] prevents us having to do a string copy.
sub Load ($) {
-
- my $str = $_[0];
-
- # Handle special cases
- foreach my $length ( BOM_MIN_LENGTH .. BOM_MAX_LENGTH ) {
- if ( my $enc = $BOM{substr($str, 0, $length)} ) {
- croak("Stream has a non UTF-8 BOM") unless $enc eq 'UTF-8';
- substr($str, 0, $length) = ''; # strip UTF-8 bom if found, we'll just ignore it
- }
- }
-
- if ( HAVE_UTF8 ) {
- utf8::decode($str); # try to decode as utf8
- }
-
- unless ( defined $str ) {
- croak("Did not provide a string to Load");
- }
- return() unless length $str;
- unless ( $str =~ /[\012\015]+$/ ) {
+ my $string = $_[0];
+ unless ( defined $string ) {
+ croak("Did not provide a string to load");
+ }
+
+ # Byte order marks
+ if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) {
+ croak("Stream has a non UTF-8 Unicode Byte Order Mark");
+ } else {
+ # Strip UTF-8 bom if found, we'll just ignore it
+ $string =~ s/^\357\273\277//;
+ }
+
+ # Try to decode as utf8
+ utf8::decode($string) if HAVE_UTF8;
+
+ # Check for some special cases
+ return () unless length $string;
+ unless ( $string =~ /[\012\015]+\z/ ) {
croak("Stream does not end with newline character");
}
# Split the file into lines
- my @lines = grep { ! /^\s*(?:\#.*)?$/ }
- split /(?:\015{1,2}\012|\015|\012)/, $str;
+ my @lines = grep { ! /^\s*(?:\#.*)?\z/ }
+ split /(?:\015{1,2}\012|\015|\012)/, $string;
+
+ # Strip the initial YAML header
+ @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines;
# A nibbling parser
my @documents = ();
while ( @lines ) {
# Do we have a document header?
- if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?$/ ) {
+ if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) {
# Handle scalar documents
shift @lines;
- if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML:[\d\.]+)$/ ) {
+ if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) {
push @documents, _scalar( "$1", [ undef ], \@lines );
next;
}
}
- if ( ! @lines or $lines[0] =~ /^---\s*(?:(.+)\s*)?$/ ) {
+ if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) {
# A naked document
push @documents, undef;
+ while ( @lines and $lines[0] !~ /^---/ ) {
+ shift @lines;
+ }
} elsif ( $lines[0] =~ /^\s*\-/ ) {
# An array at the root
@@ -115,14 +123,14 @@
push @documents, $document;
_array( $document, [ 0 ], \@lines );
- } elsif ( $lines[0] =~ /^(\s*)\w/ ) {
+ } elsif ( $lines[0] =~ /^(\s*)\S/ ) {
# A hash at the root
my $document = { };
push @documents, $document;
_hash( $document, [ length($1) ], \@lines );
} else {
- croak("Parse::CPAN::Meta does not support the line '$lines[0]'");
+ croak("Parse::CPAN::Meta failed to classify line '$lines[0]'");
}
}
@@ -135,55 +143,48 @@
# Deparse a scalar string to the actual scalar
sub _scalar ($$$) {
- my $string = shift;
- my $indent = shift;
- my $lines = shift;
+ my ($string, $indent, $lines) = @_;
# Trim trailing whitespace
- $string =~ s/\s*$//;
+ $string =~ s/\s*\z//;
# Explitic null/undef
return undef if $string eq '~';
# Quotes
- if ( $string =~ /^\'(.*?)\'$/ ) {
+ if ( $string =~ /^\'(.*?)\'\z/ ) {
return '' unless defined $1;
- my $rv = $1;
- $rv =~ s/\'\'/\'/g;
- return $rv;
- }
- if ( $string =~ /^\"((?:\\.|[^\"])*)\"$/ ) {
- my $str = $1;
- $str =~ s/\\"/"/g;
- $str =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex;
- return $str;
- }
- if ( $string =~ /^[\'\"]/ ) {
- # A quote with folding... we don't support that
- croak("Parse::CPAN::Meta does not support multi-line quoted scalars");
- }
-
- # Null hash and array
- if ( $string eq '{}' ) {
- # Null hash
- return {};
- }
- if ( $string eq '[]' ) {
- # Null array
- return [];
- }
+ $string = $1;
+ $string =~ s/\'\'/\'/g;
+ return $string;
+ }
+ if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) {
+ # Reusing the variable is a little ugly,
+ # but avoids a new variable and a string copy.
+ $string = $1;
+ $string =~ s/\\"/"/g;
+ $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex;
+ return $string;
+ }
+
+ # Special cases
+ if ( $string =~ /^[\'\"!&]/ ) {
+ croak("Parse::CPAN::Meta does not support a feature in line '$lines->[0]'");
+ }
+ return {} if $string eq '{}';
+ return [] if $string eq '[]';
# Regular unquoted string
return $string unless $string =~ /^[>|]/;
# Error
- croak("Multi-line scalar content missing") unless @$lines;
+ croak("Parse::CPAN::Meta failed to find multi-line scalar content") unless @$lines;
# Check the indent depth
- $lines->[0] =~ /^(\s*)/;
+ $lines->[0] =~ /^(\s*)/;
$indent->[-1] = length("$1");
if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) {
- croak("Illegal line indenting");
+ croak("Parse::CPAN::Meta found bad indenting in line '$lines->[0]'");
}
# Pull the lines
@@ -195,26 +196,29 @@
}
my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n";
- my $t = (substr($string, 1, 1) eq '-') ? '' : "\n";
+ my $t = (substr($string, 1, 1) eq '-') ? '' : "\n";
return join( $j, @multiline ) . $t;
}
# Parse an array
sub _array ($$$) {
- my $array = shift;
- my $indent = shift;
- my $lines = shift;
+ my ($array, $indent, $lines) = @_;
while ( @$lines ) {
# Check for a new document
- return 1 if $lines->[0] =~ /^---\s*(?:(.+)\s*)?$/;
+ if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) {
+ while ( @$lines and $lines->[0] !~ /^---/ ) {
+ shift @$lines;
+ }
+ return 1;
+ }
# Check the indent level
$lines->[0] =~ /^(\s*)/;
if ( length($1) < $indent->[-1] ) {
return 1;
} elsif ( length($1) > $indent->[-1] ) {
- croak("Hash line over-indented");
+ croak("Parse::CPAN::Meta found bad indenting in line '$lines->[0]'");
}
if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) {
@@ -224,12 +228,12 @@
push @$array, { };
_hash( $array->[-1], [ @$indent, $indent2 ], $lines );
- } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*$/ ) {
+ } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) {
# Array entry with a value
shift @$lines;
push @$array, _scalar( "$2", [ @$indent, undef ], $lines );
- } elsif ( $lines->[0] =~ /^\s*\-\s*$/ ) {
+ } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) {
shift @$lines;
unless ( @$lines ) {
push @$array, undef;
@@ -246,12 +250,12 @@
_array( $array->[-1], [ @$indent, $indent2 ], $lines );
}
- } elsif ( $lines->[0] =~ /^(\s*)\w/ ) {
+ } elsif ( $lines->[0] =~ /^(\s*)\S/ ) {
push @$array, { };
_hash( $array->[-1], [ @$indent, length("$1") ], $lines );
} else {
- croak("Parse::CPAN::Meta does not support the line '$lines->[0]'");
+ croak("Parse::CPAN::Meta failed to classify line '$lines->[0]'");
}
} elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) {
@@ -265,7 +269,7 @@
return 1;
} else {
- croak("Parse::CPAN::Meta does not support the line '$lines->[0]'");
+ croak("Parse::CPAN::Meta failed to classify line '$lines->[0]'");
}
}
@@ -274,25 +278,31 @@
# Parse an array
sub _hash ($$$) {
- my $hash = shift;
- my $indent = shift;
- my $lines = shift;
+ my ($hash, $indent, $lines) = @_;
while ( @$lines ) {
# Check for a new document
- return 1 if $lines->[0] =~ /^---\s*(?:(.+)\s*)?$/;
+ if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) {
+ while ( @$lines and $lines->[0] !~ /^---/ ) {
+ shift @$lines;
+ }
+ return 1;
+ }
# Check the indent level
- $lines->[0] =~/^(\s*)/;
+ $lines->[0] =~ /^(\s*)/;
if ( length($1) < $indent->[-1] ) {
return 1;
} elsif ( length($1) > $indent->[-1] ) {
- croak("Hash line over-indented");
+ croak("Parse::CPAN::Meta found bad indenting in line '$lines->[0]'");
}
# Get the key
- unless ( $lines->[0] =~ s/^\s*([^\'\"][^\n]*?)\s*:(\s+|$)// ) {
- croak("Bad hash line");
+ unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+|$)// ) {
+ if ( $lines->[0] =~ /^\s*[?\'\"]/ ) {
+ croak("Parse::CPAN::Meta does not support a feature in line '$lines->[0]'");
+ }
+ croak("Parse::CPAN::Meta failed to classify line '$lines->[0]'");
}
my $key = $1;
@@ -300,26 +310,25 @@
if ( length $lines->[0] ) {
# Yes
$hash->{$key} = _scalar( shift(@$lines), [ @$indent, undef ], $lines );
- next;
- }
-
- # An indent
- shift @$lines;
- unless ( @$lines ) {
- $hash->{$key} = undef;
- return 1;
- }
- if ( $lines->[0] =~ /^(\s*)-/ ) {
- $hash->{$key} = [];
- _array( $hash->{$key}, [ @$indent, length($1) ], $lines );
- } elsif ( $lines->[0] =~ /^(\s*)./ ) {
- my $indent2 = length("$1");
- if ( $indent->[-1] >= $indent2 ) {
- # Null hash entry
+ } else {
+ # An indent
+ shift @$lines;
+ unless ( @$lines ) {
$hash->{$key} = undef;
- } else {
- $hash->{$key} = {};
- _hash( $hash->{$key}, [ @$indent, length($1) ], $lines );
+ return 1;
+ }
+ if ( $lines->[0] =~ /^(\s*)-/ ) {
+ $hash->{$key} = [];
+ _array( $hash->{$key}, [ @$indent, length($1) ], $lines );
+ } elsif ( $lines->[0] =~ /^(\s*)./ ) {
+ my $indent2 = length("$1");
+ if ( $indent->[-1] >= $indent2 ) {
+ # Null hash entry
+ $hash->{$key} = undef;
+ } else {
+ $hash->{$key} = {};
+ _hash( $hash->{$key}, [ @$indent, length($1) ], $lines );
+ }
}
}
}
@@ -367,34 +376,36 @@
=head1 DESCRIPTION
-B<Parse::CPAN::Meta> is a parser for META.yml files, based on the
+B<Parse::CPAN::Meta> is a parser for F<META.yml> files, based on the
parser half of L<YAML::Tiny>.
It supports a basic subset of the full YAML specification, enough to
-implement parsing of typical META.yml files, and other similarly simple
+implement parsing of typical F<META.yml> files, and other similarly simple
YAML files.
If you need something with more power, move up to a full YAML parser such
as L<YAML>, L<YAML::Syck> or L<YAML::LibYAML>.
-Parse::CPAN::Meta provides a very simply API of only two functions, based
-on the YAML functions of the same name. Wherever possible, identical
-calling semantics are used.
-
-All error reporting is done with exceptions (dieing).
+B<Parse::CPAN::Meta> provides a very simply API of only two functions,
+based on the YAML functions of the same name. Wherever possible,
+identical calling semantics are used.
+
+All error reporting is done with exceptions (die'ing).
=head1 FUNCTIONS
For maintenance clarity, no functions are exported.
-=head2 Load( $string )
-
- my @documents = Load( $string );
+=head2 Load
+
+ my @yaml = Load( $string );
Parses a string containing a valid YAML stream into a list of Perl data
structures.
-=head2 LoadFile( $file_name )
+=head2 LoadFile
+
+ my @yaml = LoadFile( 'META.yml' );
Reads the YAML stream from a file instead of a string.
@@ -410,7 +421,8 @@
=head1 SEE ALSO
-L<YAML::Tiny>, L<YAML>, L<YAML::Syck>
+L<YAML>, L<YAML::Syck>, L<Config::Tiny>, L<CSS::Tiny>,
+L<http://use.perl.org/~Alias/journal/29427>, L<http://ali.as/>
=head1 COPYRIGHT
Modified: trunk/libparse-cpan-meta-perl/t/02_basic.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/02_basic.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/02_basic.t (original)
+++ trunk/libparse-cpan-meta-perl/t/02_basic.t Sun May 17 20:33:53 2009
@@ -56,26 +56,31 @@
"---\n",
[ undef ],
'only_header',
+ noyamlperl => 1,
);
yaml_ok(
"---\n---\n",
[ undef, undef ],
'two_header',
+ noyamlperl => 1,
);
yaml_ok(
"--- ~\n",
[ undef ],
'one_undef',
+ noyamlperl => 1,
);
yaml_ok(
"--- ~\n",
[ undef ],
'one_undef2',
+ noyamlperl => 1,
);
yaml_ok(
"--- ~\n---\n",
[ undef, undef ],
'two_undef',
+ noyamlperl => 1,
);
# Just a scalar
@@ -110,6 +115,7 @@
"---\n- ~\n- bar\n",
[ [ undef, 'bar' ] ],
'one_listundef',
+ noyamlperl => 1,
);
# Simple hashs
@@ -123,6 +129,7 @@
"---\nfoo: bar\nthis: ~\n",
[ { this => undef, foo => 'bar' } ],
'one_hash2',
+ noyamlperl => 1,
);
# Simple array inside a hash with an undef
@@ -136,6 +143,7 @@
END_YAML
[ { foo => [ 'bar', undef, 'baz' ] } ],
'array_in_hash',
+ noyamlperl => 1,
);
# Simple hash inside a hash with an undef
@@ -148,6 +156,7 @@
END_YAML
[ { foo => undef, bar => { foo => 'bar' } } ],
'hash_in_hash',
+ noyamlperl => 1,
);
# Mixed hash and scalars inside an array
@@ -170,6 +179,7 @@
{ foo => 'bar', this => 'that' },
] ],
'hash_in_array',
+ noyamlperl => 1,
);
# Simple single quote
@@ -194,12 +204,16 @@
"--- \" \"\n",
[ ' ' ],
"only_spaces",
+ noyamlpm => 1,
+ noyamlperl => 1,
);
yaml_ok(
"--- \" foo\"\n--- \"bar \"\n",
[ " foo", "bar " ],
"leading_trailing_spaces",
+ noyamlpm => 1,
+ noyamlperl => 1,
);
# Implicit document start
@@ -225,6 +239,7 @@
END_YAML
[ [ undef, { foo => 'bar', this => 'that' }, 'baz' ] ],
'inline_nested_hash',
+ noyamlperl => 1,
);
# Empty comments
Modified: trunk/libparse-cpan-meta-perl/t/03_regression.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/03_regression.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/03_regression.t (original)
+++ trunk/libparse-cpan-meta-perl/t/03_regression.t Sun May 17 20:33:53 2009
@@ -20,7 +20,7 @@
use File::Spec::Functions ':ALL';
use Parse::CPAN::Meta::Test;
-use Test::More tests(20);
+use Test::More tests(37);
@@ -62,42 +62,91 @@
);
# Piped multi-line scalar
-yaml_ok( <<'END_YAML', [ [ "foo\nbar\n", 1 ] ], 'indented', nosyck => 1 );
+yaml_ok(
+ <<'END_YAML',
---
- |
foo
bar
- 1
END_YAML
+ [ [ "foo\nbar\n", 1 ] ],
+ 'indented',
+);
# ... with a pointless hyphen
-yaml_ok( <<'END_YAML', [ [ "foo\nbar", 1 ] ], 'indented', nosyck => 1 );
+yaml_ok( <<'END_YAML',
---
- |-
foo
bar
- 1
END_YAML
-
-
-
-
-
-
-#####################################################################
-# Support for YAML document version declarations
-
-# Simple case
+ [ [ "foo\nbar", 1 ] ],
+ 'indented',
+);
+
+
+
+
+
+#####################################################################
+# Support for YAML version directives
+
+# Simple inline case (comment variant)
yaml_ok(
<<'END_YAML',
--- #YAML:1.0
foo: bar
END_YAML
[ { foo => 'bar' } ],
- 'simple_doctype',
-);
-
-# Multiple documents
+ 'simple_doctype_comment',
+ nosyck => 1,
+);
+
+# Simple inline case (percent variant)
+yaml_ok(
+ <<'END_YAML',
+--- %YAML:1.0
+foo: bar
+END_YAML
+ [ { foo => 'bar' } ],
+ 'simple_doctype_percent',
+ noyamlpm => 1,
+ noxs => 1,
+ noyamlperl => 1,
+);
+
+# Simple header (comment variant)
+yaml_ok(
+ <<'END_YAML',
+%YAML:1.0
+---
+foo: bar
+END_YAML
+ [ { foo => 'bar' } ],
+ 'predocument_1_0',
+ noyamlpm => 1,
+ nosyck => 1,
+ noxs => 1,
+ noyamlperl => 1,
+);
+
+# Simple inline case (comment variant)
+yaml_ok(
+ <<'END_YAML',
+%YAML 1.1
+---
+foo: bar
+END_YAML
+ [ { foo => 'bar' } ],
+ 'predocument_1_1',
+ noyamlpm => 1,
+ nosyck => 1,
+ noyamlperl => 1,
+);
+
+# Multiple inline documents (comment variant)
yaml_ok(
<<'END_YAML',
--- #YAML:1.0
@@ -108,7 +157,32 @@
foo: bar
END_YAML
[ { foo => 'bar' }, [ 1 ], { foo => 'bar' } ],
- 'multi_doctype',
+ 'multi_doctype_comment',
+);
+
+# Simple pre-document case (comment variant)
+yaml_ok(
+ <<'END_YAML',
+%YAML 1.1
+---
+foo: bar
+END_YAML
+ [ { foo => 'bar' } ],
+ 'predocument_percent',
+ noyamlpm => 1,
+ nosyck => 1,
+ noyamlperl => 1,
+);
+
+# Simple pre-document case (comment variant)
+yaml_ok(
+ <<'END_YAML',
+#YAML 1.1
+---
+foo: bar
+END_YAML
+ [ { foo => 'bar' } ],
+ 'predocument_comment',
);
@@ -192,8 +266,13 @@
- ~
- 'bar'
END_YAML
- [ { abstract => 'Generate fractal curves', foo => undef, arr => [ 'foo', undef, 'bar' ] } ],
+ [ {
+ abstract => 'Generate fractal curves',
+ foo => undef,
+ arr => [ 'foo', undef, 'bar' ],
+ } ],
'trailing whitespace',
+ noyamlperl => 1,
);
@@ -218,15 +297,35 @@
#####################################################################
-# Single Quote Idiosyncracy
-
-yaml_ok(
- <<'END_YAML',
----
-slash: '\\'
-name: 'O''Reilly'
-END_YAML
- [ { slash => "\\\\", name => "O'Reilly" } ],
+# Quote and Escaping Idiosyncracies
+
+yaml_ok(
+ <<'END_YAML',
+---
+name1: 'O''Reilly'
+name2: 'O''Reilly O''Tool'
+name3: 'Double '''' Quote'
+END_YAML
+ [ {
+ name1 => "O'Reilly",
+ name2 => "O'Reilly O'Tool",
+ name3 => "Double '' Quote",
+ } ],
+ 'single quote subtleties',
+);
+
+yaml_ok(
+ <<'END_YAML',
+---
+slash1: '\\'
+slash2: '\\foo'
+slash3: '\\foo\\\\'
+END_YAML
+ [ {
+ slash1 => "\\\\",
+ slash2 => "\\\\foo",
+ slash3 => "\\\\foo\\\\\\\\",
+ } ],
'single quote subtleties',
);
@@ -246,6 +345,8 @@
END_YAML
[ { foo => 0, requires => undef, build_requires => undef } ],
'empty hash keys',
+ noyamlpm => 1,
+ noyamlperl => 1,
);
yaml_ok(
@@ -257,6 +358,8 @@
END_YAML
[ [ 'foo', undef, undef ] ],
'empty array keys',
+ noyamlpm => 1,
+ noyamlperl => 1,
);
@@ -273,6 +376,8 @@
END_YAML
[ { foo => 'bar' } ],
'comment header',
+ noyamlpm => 1,
+ noyamlperl => 1,
);
@@ -290,6 +395,163 @@
[ { foo => "foo\\\n\tbar" } ],
'special characters',
);
+
+
+
+
+
+#####################################################################
+# Confirm we can read the synopsis
+
+yaml_ok(
+ <<'END_YAML',
+---
+rootproperty: blah
+section:
+ one: two
+ three: four
+ Foo: Bar
+ empty: ~
+END_YAML
+ [ {
+ rootproperty => 'blah',
+ section => {
+ one => 'two',
+ three => 'four',
+ Foo => 'Bar',
+ empty => undef,
+ },
+ } ],
+ 'synopsis',
+ noyamlperl => 1,
+);
+
+
+
+
+
+#####################################################################
+# Unprintable Characters
+
+yaml_ok(
+ "--- \"foo\\n\\x00\"\n",
+ [ "foo\n\0" ],
+ 'unprintable',
+);
+
+
+
+
+
+#####################################################################
+# Empty Quote Line
+
+yaml_ok(
+ <<'END_YAML',
+---
+- foo
+#
+- bar
+END_YAML
+ [ [ "foo", "bar" ] ],
+);
+
+
+
+
+
+#####################################################################
+# Indentation after empty hash value
+
+yaml_ok(
+ <<'END_YAML',
+---
+Test:
+ optmods:
+ Bad: 0
+ Foo: 1
+ Long: 0
+ version: 5
+Test_IncludeA:
+ optmods:
+Test_IncludeB:
+ optmods:
+_meta:
+ name: 'test profile'
+ note: 'note this test profile'
+END_YAML
+ [ {
+ Test => {
+ optmods => {
+ Bad => 0,
+ Foo => 1,
+ Long => 0,
+ },
+ version => 5,
+ },
+ Test_IncludeA => {
+ optmods => undef,
+ },
+ Test_IncludeB => {
+ optmods => undef,
+ },
+ _meta => {
+ name => 'test profile',
+ note => 'note this test profile',
+ },
+ } ],
+ 'Indentation after empty hash value',
+ noyamlperl => 1,
+);
+
+
+
+
+
+#####################################################################
+# Spaces in the Key
+
+yaml_ok(
+ <<'END_YAML',
+---
+the key: the value
+END_YAML
+ [ { 'the key' => 'the value' } ],
+);
+
+
+
+
+
+#####################################################################
+# Ticker #32402
+
+# Tests a particular pathological case
+
+yaml_ok(
+ <<'END_YAML',
+---
+- value
+- '><'
+END_YAML
+ [ [ 'value', '><' ] ],
+ 'Pathological >< case',
+);
+
+
+
+
+
+#####################################################################
+# Special Characters
+
+#yaml_ok(
+# <<'END_YAML',
+#---
+#- "Ingy d\xC3\xB6t Net"
+#END_YAML
+# [ [ "Ingy d\xC3\xB6t Net" ] ],
+#);
@@ -308,4 +570,53 @@
END_YAML
[ { foo => [ 'list' ], bar => 'value' } ],
'Non-indenting sub-list',
-);
+ noyamlpm => 1,
+ noyamlperl => 1,
+);
+
+
+
+
+
+
+#####################################################################
+# Check Multiple-Escaping
+
+# RT #42119: write of two single quotes
+yaml_ok(
+ "--- \"A'B'C\"\n",
+ [ "A'B'C" ],
+ 'Multiple escaping of quote ok',
+);
+
+# Escapes without whitespace
+yaml_ok(
+ "--- A\\B\\C\n",
+ [ "A\\B\\C" ],
+ 'Multiple escaping of escape ok',
+);
+
+# Escapes with whitespace
+yaml_ok(
+ "--- 'A\\B \\C'\n",
+ [ "A\\B \\C" ],
+ 'Multiple escaping of escape with whitespace ok',
+);
+
+
+
+
+
+######################################################################
+# Check illegal characters that are in legal places
+
+yaml_ok(
+ "--- 'Wow!'\n",
+ [ "Wow!" ],
+ 'Bang in a quote',
+);
+yaml_ok(
+ "--- 'This&that'\n",
+ [ "This&that" ],
+ 'Ampersand in a quote',
+);
Modified: trunk/libparse-cpan-meta-perl/t/11_meta_yml.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/11_meta_yml.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/11_meta_yml.t (original)
+++ trunk/libparse-cpan-meta-perl/t/11_meta_yml.t Sun May 17 20:33:53 2009
@@ -20,14 +20,14 @@
use File::Spec::Functions ':ALL';
use Parse::CPAN::Meta::Test;
-use Test::More tests(8, 2);
+use Test::More tests(8, 3);
#####################################################################
-# Testing YAML::Tiny's META.yml file
+# Testing YAML::Tiny's own META.yml file
yaml_ok(
<<'END_YAML',
@@ -198,6 +198,7 @@
generated_by => 'ExtUtils::MakeMaker version 6.17',
} ],
'Acme-Time-Baby',
+ noyamlperl => 1,
);
@@ -206,30 +207,6 @@
#####################################################################
# File with a YAML header
-
-yaml_ok(
- <<'END_YAML',
---- %YAML:1.0
-name: Data-Swap
-version: 0.05
-license: perl
-distribution_type: module
-requires:
- perl: 5.6.0
-dynamic_config: 0
-END_YAML
- [ {
- name => 'Data-Swap',
- version => '0.05',
- license => 'perl',
- distribution_type => 'module',
- requires => {
- perl => '5.6.0',
- },
- dynamic_config => '0',
- } ],
- 'Data-Swap',
-);
yaml_ok(
<<'END_YAML',
@@ -253,6 +230,7 @@
dynamic_config => '0',
} ],
'Data-Swap',
+ nosyck => 1,
);
@@ -293,6 +271,7 @@
version => '1.2.1',
} ],
'Template-Provider-Unicode-Japanese',
+ noyamlperl => 1,
);
}
@@ -314,5 +293,113 @@
version => '0.04',
} ],
'HTML-WebDAO',
+ nosyck => 1,
);
}
+
+SCOPE: {
+ my $content = load_ok(
+ 'Spreadsheet-Read.yml',
+ catfile( test_data_directory(), 'Spreadsheet-Read.yml' ),
+ 100
+ );
+ yaml_ok(
+ $content,
+ [ {
+ 'resources' => {
+ 'license' => 'http://dev.perl.org/licenses/'
+ },
+ 'meta-spec' => {
+ 'version' => '1.4',
+ 'url' => 'http://module-build.sourceforge.net/META-spec-v1.4.html'
+ },
+ 'distribution_type' => 'module',
+ 'generated_by' => 'Author',
+ 'version' => 'VERSION',
+ 'name' => 'Read',
+ 'author' => [
+ 'H.Merijn Brand <h.m.brand at xs4all.nl>'
+ ],
+ 'license' => 'perl',
+ 'build_requires' => {
+ 'Test::More' => '0',
+ 'Test::Harness' => '0',
+ 'perl' => '5.006'
+ },
+ 'provides' => {
+ 'Spreadsheet::Read' => {
+ 'version' => 'VERSION',
+ 'file' => 'Read.pm'
+ }
+ },
+ 'optional_features' => [
+ {
+ 'opt_csv' => {
+ 'requires' => {
+ 'Text::CSV_XS' => '0.23'
+ },
+ 'recommends' => {
+ 'Text::CSV_PP' => '1.10',
+ 'Text::CSV_XS' => '0.58',
+ 'Text::CSV' => '1.10'
+ },
+ 'description' => 'Provides parsing of CSV streams'
+ }
+ },
+ {
+ 'opt_excel' => {
+ 'requires' => {
+ 'Spreadsheet::ParseExcel' => '0.26',
+ 'Spreadsheet::ParseExcel::FmtDefault' => '0'
+ },
+ 'recommends' => {
+ 'Spreadsheet::ParseExcel' => '0.42'
+ },
+ 'description' => 'Provides parsing of Microsoft Excel files'
+ }
+ },
+ {
+ 'opt_excelx' => {
+ 'requires' => {
+ 'Spreadsheet::XLSX' => '0.07'
+ },
+ 'description' => 'Provides parsing of Microsoft Excel 2007 files'
+ }
+ },
+ {
+ 'opt_oo' => {
+ 'requires' => {
+ 'Spreadsheet::ReadSXC' => '0.2'
+ },
+ 'description' => 'Provides parsing of OpenOffice spreadsheets'
+ }
+ },
+ {
+ 'opt_tools' => {
+ 'recommends' => {
+ 'Tk::TableMatrix::Spreadsheet' => '0',
+ 'Tk::NoteBook' => '0',
+ 'Tk' => '0'
+ },
+ 'description' => 'Spreadsheet tools'
+ }
+ }
+ ],
+ 'requires' => {
+ 'perl' => '5.006',
+ 'Data::Dumper' => '0',
+ 'Exporter' => '0',
+ 'Carp' => '0'
+ },
+ 'recommends' => {
+ 'perl' => '5.008005',
+ 'IO::Scalar' => '0',
+ 'File::Temp' => '0.14'
+ },
+ 'abstract' => 'Meta-Wrapper for reading spreadsheet data'
+ } ],
+ 'Spreadsheet-Read',
+ noyamlpm => 1,
+ noyamlperl => 1,
+ );
+}
Modified: trunk/libparse-cpan-meta-perl/t/12_plagger.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/12_plagger.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/12_plagger.t (original)
+++ trunk/libparse-cpan-meta-perl/t/12_plagger.t Sun May 17 20:33:53 2009
@@ -101,8 +101,8 @@
nickname: plaggerbot
server_host: chat.freenode.net
server_channels:
- - #plagger-ja
- - #plagger
+ - '#plagger-ja'
+ - '#plagger'
END_YAML
Modified: trunk/libparse-cpan-meta-perl/t/13_perl_smith.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/13_perl_smith.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/13_perl_smith.t (original)
+++ trunk/libparse-cpan-meta-perl/t/13_perl_smith.t Sun May 17 20:33:53 2009
@@ -153,4 +153,6 @@
},
} ],
'vanilla.yml',
+ nosyck => 1,
+ noyamlperl => 1,
);
Modified: trunk/libparse-cpan-meta-perl/t/14_yaml_org.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/14_yaml_org.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/14_yaml_org.t (original)
+++ trunk/libparse-cpan-meta-perl/t/14_yaml_org.t Sun May 17 20:33:53 2009
@@ -68,5 +68,5 @@
END_TEXT
} ],
'sample.yml',
-
+ # nosyck => 1,
);
Modified: trunk/libparse-cpan-meta-perl/t/15_multibyte.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/15_multibyte.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/15_multibyte.t (original)
+++ trunk/libparse-cpan-meta-perl/t/15_multibyte.t Sun May 17 20:33:53 2009
@@ -51,6 +51,3 @@
skip "no utf8 support", 1 unless Parse::CPAN::Meta::HAVE_UTF8();
ok( utf8::is_utf8($yaml[0]->{author}), "utf8 decoded" );
}
-
-exit(0);
-
Modified: trunk/libparse-cpan-meta-perl/t/17_toolbar.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/17_toolbar.t?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/17_toolbar.t (original)
+++ trunk/libparse-cpan-meta-perl/t/17_toolbar.t Sun May 17 20:33:53 2009
@@ -55,4 +55,5 @@
]
} ],
'toolbar.yml',
+ noyamlperl => 1,
);
Modified: trunk/libparse-cpan-meta-perl/t/lib/Parse/CPAN/Meta/Test.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libparse-cpan-meta-perl/t/lib/Parse/CPAN/Meta/Test.pm?rev=35594&op=diff
==============================================================================
--- trunk/libparse-cpan-meta-perl/t/lib/Parse/CPAN/Meta/Test.pm (original)
+++ trunk/libparse-cpan-meta-perl/t/lib/Parse/CPAN/Meta/Test.pm Sun May 17 20:33:53 2009
@@ -9,7 +9,10 @@
BEGIN {
require Exporter;
@ISA = qw{ Exporter };
- @EXPORT = qw{ tests yaml_ok slurp load_ok test_data_directory };
+ @EXPORT = qw{
+ tests yaml_ok yaml_error slurp load_ok
+ test_data_directory
+ };
}
sub test_data_directory {
@@ -53,6 +56,12 @@
return 1;
}
+sub yaml_error {
+ my $string = shift;
+ my $yaml = eval { Parse::CPAN::Meta::Load( $string ); };
+ Test::More::like( $@, qr/$_[0]/, "YAML::Tiny throws expected error" );
+}
+
sub slurp {
my $file = shift;
local $/ = undef;
More information about the Pkg-perl-cvs-commits
mailing list