X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FCPANPLUS%2FDist%2FGentoo%2FAtom.pm;h=fcfa685cae2495be626b37007c6c9e9474d14b78;hb=a3d7c9d6304ce5516bdb44d28ec2eba9c57082f3;hp=565178ec501f50babd77131fa8bd1f072a2311c8;hpb=77110d525f6b966b8f87c11669f177127e6930d9;p=perl%2Fmodules%2FCPANPLUS-Dist-Gentoo.git diff --git a/lib/CPANPLUS/Dist/Gentoo/Atom.pm b/lib/CPANPLUS/Dist/Gentoo/Atom.pm index 565178e..fcfa685 100644 --- a/lib/CPANPLUS/Dist/Gentoo/Atom.pm +++ b/lib/CPANPLUS/Dist/Gentoo/Atom.pm @@ -32,7 +32,10 @@ use overload ( use CPANPLUS::Dist::Gentoo::Version; -my $version_rx = $CPANPLUS::Dist::Gentoo::Version::version_rx; +my $range_rx = qr/(?:<|<=|=|>=|>)/; +my $name_rx = qr/[a-zA-Z0-9_+-]+/; +my $category_rx = $name_rx; +my $version_rx = $CPANPLUS::Dist::Gentoo::Version::version_rx; =head1 METHODS @@ -52,10 +55,11 @@ sub new { if (defined $args{name}) { ($range, $category, $name, $version) = @args{qw/range category name version/}; Carp::confess('Category unspecified') unless defined $category; - /[^\w-]/ and Carp::confess('Invalid argument') for $name, $category; + Carp::confess('Invalid category') unless $category =~ /^$category_rx$/o; + Carp::confess('Invalid name') unless $name =~ /^$name_rx$/o; } elsif (defined $args{atom}) { my $atom = $args{atom}; - $atom =~ m{^(<|<=|=|>=|>)?([\w-]+)/([\w-]+)(?:-v?($version_rx))?$} + $atom =~ m{^($range_rx)?($category_rx)/($name_rx)(?:-v?($version_rx))?$}o or Carp::confess('Invalid atom'); ($range, $category, $name, $version) = ($1, $2, $3, $4); } else { @@ -64,17 +68,16 @@ sub new { if (defined $version) { unless (Scalar::Util::blessed($version) - and $_->isa('CPANPLUS::Dist::Gentoo::Version')) { + and $version->isa('CPANPLUS::Dist::Gentoo::Version')) { $version = CPANPLUS::Dist::Gentoo::Version->new($version); } } if (defined $version) { if (defined $range) { - Carp::confess("Invalid range $range") - unless grep $range eq $_, qw|< <= = >= >|; + Carp::confess("Invalid range $range") unless $range =~ /^$range_rx$/o; } else { - $range = '='; + $range = '>='; } } else { Carp::confess('Range atoms require a valid version') @@ -103,7 +106,7 @@ sub new_from_ebuild { my $ebuild = shift; $ebuild = '' unless defined $ebuild; - $ebuild =~ m{/([\w-]+)/([\w-]+)/\2-v?($version_rx)\.ebuild$} + $ebuild =~ m{/($category_rx)/($name_rx)/\2-v?($version_rx)\.ebuild$}o or Carp::confess('Invalid ebuild'); my ($category, $name, $version) = ($1, $2, $3);