]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/blobdiff - lib/CPANPLUS/Dist/Gentoo.pm
Better logic for capturing "emerge --info" output
[perl/modules/CPANPLUS-Dist-Gentoo.git] / lib / CPANPLUS / Dist / Gentoo.pm
index 84ed79215182f13d0c044fdfce7b80f8cd6cfee0..177c70f91df1e6db4d1c5b94442fa504d3d2b9be 100644 (file)
@@ -9,7 +9,6 @@ use File::Path qw/mkpath/;
 use File::Spec::Functions qw/catdir catfile/;
 
 use IPC::Cmd qw/run can_run/;
-use version;
 
 use CPANPLUS::Error;
 
@@ -23,11 +22,11 @@ CPANPLUS::Dist::Gentoo - CPANPLUS backend generating Gentoo ebuilds.
 
 =head1 VERSION
 
-Version 0.05
+Version 0.07
 
 =cut
 
-our $VERSION = '0.05';
+our $VERSION = '0.07';
 
 =head1 SYNOPSIS
 
@@ -85,22 +84,22 @@ sub format_available {
  }
 
  if (IPC::Cmd->can_capture_buffer) {
-  my ($success, $errmsg, $output) = run command => [ qw/emerge --info/ ],
-                                        verbose => 0;
+  my $buffers;
+  my ($success, $errmsg) = run command => [ qw/emerge --info/ ],
+                               verbose => 0,
+                               buffer  => \$buffers;
   if ($success) {
-   for (@{$output || []}) {
-    if (/^PORTDIR_OVERLAY=(.*)$/m) {
-     $overlays = [ map abs_path($_), split ' ', _unquote($1) ];
-    }
-    if (/^ACCEPT_KEYWORDS=(.*)$/m) {
-     $default_keywords = [ split ' ', _unquote($1) ];
-    }
-    if (/^DISTDIR=(.*)$/m) {
-     $default_distdir = abs_path(_unquote($1));
-    }
-    if (/^PORTDIR=(.*)$/m) {
-     $main_portdir = abs_path(_unquote($1));
-    }
+   if ($buffers =~ /^PORTDIR_OVERLAY=(.*)$/m) {
+    $overlays = [ map abs_path($_), split ' ', _unquote($1) ];
+   }
+   if ($buffers =~ /^ACCEPT_KEYWORDS=(.*)$/m) {
+    $default_keywords = [ split ' ', _unquote($1) ];
+   }
+   if ($buffers =~ /^DISTDIR=(.*)$/m) {
+    $default_distdir = abs_path(_unquote($1));
+   }
+   if ($buffers =~ /^PORTDIR=(.*)$/m) {
+    $main_portdir = abs_path(_unquote($1));
    }
   } else {
    error $errmsg;
@@ -207,16 +206,7 @@ sub prepare {
 
  $stat->distribution($name . '-' . $version);
 
- $version =~ s/[^\d._]+//g;
- $version =~ s/^[._]*//;
- $version =~ s/[._]*$//;
- $version =~ s/[._]*_[._]*/_/g;
- {
-  ($version, my $patch, my @rest) = split /_/, $version;
-  $version .= '_p' . $patch if defined $patch;
-  $version .= join('.', '', @rest) if @rest;
- }
- $stat->eb_version($version);
+ $stat->eb_version(CPANPLUS::Dist::Gentoo::Maps::version_c2g($version));
 
  $stat->eb_name(CPANPLUS::Dist::Gentoo::Maps::name_c2g($name));
 
@@ -379,7 +369,7 @@ sub _cpan2portage {
 
  $name = CPANPLUS::Dist::Gentoo::Maps::name_c2g($name);
  my $ver;
- $ver = eval { version->new($version) } if defined $version;
+ $ver = CPANPLUS::Dist::Gentoo::Maps::version_c2g($version) if defined $version;
 
  my @portdirs = ($main_portdir, @{$self->status->portdir_overlay});
 
@@ -392,10 +382,10 @@ sub _cpan2portage {
 
    if (defined $ver) { # implies that $version is defined
     for (@ebuilds) {
-     next unless /\Q$atom\E-v?([\d._]+).*?\.ebuild$/;
-     my $eb_ver = eval { version->new($1) };
-     next unless defined $eb_ver and $eb_ver >= $ver;
-     return ">=$category/$atom-$version";
+     my ($eb_ver) = /\Q$atom\E-v?([\d._pr-]+).*?\.ebuild$/;
+     return ">=$category/$atom-$ver"
+            if  defined $eb_ver
+            and CPANPLUS::Dist::Gentoo::Maps::version_gcmp($eb_ver, $ver) > 0;
     }
    } else {
     return "$category/$atom";
@@ -451,7 +441,7 @@ sub _run {
 
  unless ($success) {
   error "$errmsg -- aborting";
-  if (not $verbose and defined $output and $self->status->verbose) {
+  if (not $verbose and defined $output and $stat->verbose) {
    my $msg = join '', @$output;
    1 while chomp $msg;
    error $msg;
@@ -465,9 +455,9 @@ sub _run {
 
 Gentoo (L<http://gentoo.org>).
 
-L<CPANPLUS>, L<IPC::Cmd> (core modules since 5.9.5), L<version> (since 5.009).
+L<CPANPLUS>, L<IPC::Cmd> (core modules since 5.9.5).
 
-L<Cwd> (since perl 5) L<File::Path> (5.001), L<File::Copy> (5.002), L<File::Spec::Functions> (5.00504).
+L<Cwd>, L<Carp> (since perl 5), L<File::Path> (5.001), L<File::Copy> (5.002), L<File::Spec::Functions> (5.00504).
 
 =head1 SEE ALSO