]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/commitdiff
Update gentooisms
authorVincent Pit <vince@profvince.com>
Thu, 14 Jun 2012 21:46:31 +0000 (23:46 +0200)
committerVincent Pit <vince@profvince.com>
Thu, 14 Jun 2012 21:46:31 +0000 (23:46 +0200)
Since most of the distributions in the portage tree have seen their version
numbering scheme being migrated to a new (more consistent) one, the default
mapping has been changed.

lib/CPANPLUS/Dist/Gentoo/Maps.pm
t/11-maps-name.t
t/12-maps-version.t

index 787dc896f92faabc7b611f640150c7f530c83bb0..fd1cd8a1e6f0b3d4e7abe39d1fb56289872149c9 100644 (file)
@@ -81,168 +81,197 @@ Converts the C<$version> of a CPAN distribution C<$name> to a Gentoo version num
 =cut
 
 my $default_mapping = sub {
- my ($v) = @_;
+ my ($version, @no_strip) = @_;
+
+ my $is_dev = $version =~ /_/;
+ my $has_v  = $version =~ s/^v//;
 
- $v =~ s/^v//;
- $v =~ y/-/_/;
+ for ($version) {
+  y/_-//d;
+  s/^\.*//;
+  s/\.*\z//;
+  s/\.+/./g;
+ }
 
- $v =~ s/^[._]*//;
- $v =~ s/[._]*$//;
- $v =~ s/([._])[._]*/$1/g;
+ my $dots   = $version =~ y/\.//;
 
- ($v, my $patch) = split /_/, $v, 2;
- if (defined $patch) {
-  $patch =~ s/_//g;
-  $v .= "_p$patch";
+ my @parts;
+ if ($has_v or $dots >= 2) {
+  @parts = split /\./, $version;
+ } else {
+  ($parts[0], my $subversion) = split /\./, $version, 2;
+  $subversion = '0' unless defined $subversion;
+  my $sublen = length $subversion;
+  if ($sublen < 6) {
+   $subversion .= '0' x (6 - $sublen);
+  } else {
+   my $pad = $sublen % 3;
+   $subversion .= '0' x (3 - $pad) if $pad;
+  }
+  push @parts, $subversion =~ /(...)/g;
  }
 
- return $v;
-};
+ for my $i (0 .. $#parts) {
+  next if $no_strip[$i];
+  $parts[$i] =~ s/^0+([^0]|0\z)/$1/;
+ }
+ $version  = join '.', @parts;
 
-my $insert_dot_at = sub {
- my ($v, $pos, $all) = @_;
+ $version .= '_rc' if $is_dev;
 
my ($int, $frac) = split /\./, $v, 2;
- return $v unless defined $frac;
return $version;
+};
 
- my @p;
- push @p, $-[0] while $frac =~ /[0-9]/g;
- my %digit = map { $_ => 1 } @p;
+my $default_but_ignore_v = sub {
+ my ($version) = @_;
 
- my $shift = 0;
- for (my $i = $pos; $i < @p; $i += $pos) {
-  if ($digit{$i}) {
-   substr($frac, $i + $shift, 0) = '.';
-   ++$shift;
-  }
-  last unless $all;
- }
+ $version =~ s/^v//;
 
"$int.$frac";
return $default_mapping->($version);
 };
 
-my $insert_dot_at_1     = sub { $insert_dot_at->($_[0], 1, 0) },
-my $insert_dot_at_all_1 = sub { $insert_dot_at->($_[0], 1, 1) },
-my $insert_dot_at_2     = sub { $insert_dot_at->($_[0], 2, 0) },
-my $insert_dot_at_all_2 = sub { $insert_dot_at->($_[0], 2, 1) },
-my $insert_dot_at_all_3 = sub { $insert_dot_at->($_[0], 3, 1) },
+my $default_but_no_strip_1 = sub {
+ return $default_mapping->($_[0], 0, 1);
+};
 
-my $pad_decimals_to = sub {
- my ($v, $n) = @_;
+my $default_but_no_strip_2 = sub {
+ return $default_mapping->($_[0], 0, 1, 1);
+};
+
+my $insert_dot_every = sub {
+ my ($version, $step) = @_;
 
- my ($int, $frac) = split /\./, $v, 2;
- return $v unless defined $v;
+ my $is_dev = $version =~ /_/;
 
- my $l = length $frac;
- if ($l < $n) {
-  $frac .= '0' x ($n - $l);
+ for ($version) {
+  s/^v//;
+  y/_-//d;
+  s/^\.*//;
+  s/\.*\z//;
+  s/\.+/./g;
  }
 
- "$int.$frac";
+ my @parts;
+ ($parts[0], my $subversion) = split /\./, $version, 2;
+ $subversion =~ s/\.//g;
+ my $pat = sprintf '.{1,%d}', $step || 1;
+ push @parts, $subversion =~ /($pat)/g;
+
+ s/^0+([^0]|0\z)/$1/ for @parts;
+ $version = join '.', @parts;
+
+ $version .= '_rc' if $is_dev;
+
+ return $version;
 };
 
-my $pad_decimals_to_2 = sub { $pad_decimals_to->($_[0], 2) };
-my $pad_decimals_to_4 = sub { $pad_decimals_to->($_[0], 4) };
+my $simple_cleanup = sub {
+ my ($version) = @_;
 
-my $correct_suffixes = sub {
- my ($v) = @_;
+ my $is_dev = $version =~ /_/;
 
- $v = $default_mapping->($v);
- $v =~ s/(?<!_)((?:alpha|beta|pre|rc|p)\d*)\b/_$1/g;
+ for ($version) {
+  s/^v//;
+  y/_-//d;
+  s/^\.*//;
+  s/\.*\z//;
+  s/\.+/./g;
+ }
+
+ $version .= '_rc' if $is_dev;
 
- return $v;
+ return $version;
 };
 
-my $strip_letters = sub {
- my ($v) = @_;
+my $simple_and_correct_suffixes = sub {
+ my ($version) = @_;
 
- $v = $default_mapping->($v);
- $v =~ s/(?<=\d)[a-z]+//g;
+ $version = $simple_cleanup->($version);
+ $version =~ s/(?<!_)((?:alpha|beta|pre|rc|p)\d*)\b/_$1/g;
 
- return $v;
+ return $version;
 };
 
-my $letters_as_suffix = sub {
- my ($v) = @_;
+my $simple_and_strip_letters = sub {
+ my ($version) = @_;
 
- $v = $default_mapping->($v);
- $v =~ s/(?<=\d)b(?=\d)/_beta/g;
+ $version = $simple_cleanup->($version);
+ $version =~ s/(?<=\d)[a-z]+//g;
 
- return $v;
+ return $version;
 };
 
-my %version_mismatch;
+my $simple_and_letters_as_suffix = sub {
+ my ($version) = @_;
 
-$version_mismatch{$_} = $insert_dot_at_1 for qw<
- CGI-Simple
->;
+ $version = $simple_cleanup->($version);
+ $version =~ s/(?<=\d)b(?=\d)/_beta/g;
+
+ return $version;
+};
+
+my %version_mismatch;
 
-$version_mismatch{$_} = $insert_dot_at_all_1 for qw<
- AnyEvent
- Archive-Rar
- IO-AIO
- Image-Size
- Linux-Inotify2
- PadWalker
- Tie-Array-Sorted
- Tk-TableMatrix
- XML-RSS-Feed
+$version_mismatch{$_} = $default_but_ignore_v for qw<
+ Net-DNS-Resolver-Programmable
 >;
 
-$version_mismatch{$_} = $insert_dot_at_2 for qw<
- Error
+$version_mismatch{$_} = $default_but_no_strip_1 for qw<
+ Crypt-RC4
+ File-Grep
+ MogileFS-Client-Async
+ MogileFS-Network
 >;
 
-$version_mismatch{$_} = $insert_dot_at_all_2 for qw<
- Authen-Htpasswd
- BSD-Resource
- CDDB
- Cairo
- Curses-UI
- DBD-mysql
- Email-MessageID
- Exception-Base
- ExtUtils-CBuilder
- ExtUtils-ParseXS
- FileHandle-Unget
- FreezeThaw
- Lexical-Persistence
- Lingua-EN-Inflect
- Mail-Mbox-MessageParser
- Module-Build
- SQL-Abstract-Limit
- Term-ReadLine-Perl
- Test-Differences
- Time-HiRes
- Time-Local
- perl-ldap
+$version_mismatch{$_} = $default_but_no_strip_2 for qw<
+ Net-IMAP-Simple
 >;
 
-$version_mismatch{$_} = $insert_dot_at_all_3 for qw<
- Parse-RecDescent
Return-Value
+$version_mismatch{$_} = sub { $insert_dot_every->($_[0], 1) } for qw<
+ HTTP-Cookies
HTTP-Negotiate
 >;
 
-$version_mismatch{$_} = $pad_decimals_to_2 for qw<
- Nmap-Parser
- XML-AutoWriter
+$version_mismatch{$_} = sub { $insert_dot_every->($_[0], 3) } for qw<
+ POE-Component-IKC
 >;
 
-$version_mismatch{$_} = $pad_decimals_to_4 for qw<
- Convert-BER
+$version_mismatch{$_} = $simple_cleanup for qw<
+ Alien-SDL
+ CGI-SpeedyCGI
+ Class-ISA
+ Data-Uniqid
+ ExtUtils-Install
+ File-Path
+ Getopt-GUI-Long
+ Gtk2-Notify
+ HTML-Table
+ I18N-LangTags
+ IO
+ IPC-System-Simple
+ Log-TraceMessages
+ MusicBrainz-DiscID
+ Net-IRC
+ Net-Ping
+ SDL
+ SOAP-WSDL
+ TeX-Encode
+ Tie-Simple
+ Time-Piece
+ WattsUp-Daemon
 >;
 
-$version_mismatch{$_} = $correct_suffixes for qw<
+$version_mismatch{$_} = $simple_and_correct_suffixes for qw<
  Gimp
  XML-Grove
 >;
 
-$version_mismatch{$_} = $strip_letters for qw<
+$version_mismatch{$_} = $simple_and_strip_letters for qw<
  DelimMatch
  SGMLSpm
 >;
 
-$version_mismatch{$_} = $letters_as_suffix for qw<
+$version_mismatch{$_} = $simple_and_letters_as_suffix for qw<
  Frontier-RPC
 >;
 
@@ -315,7 +344,6 @@ This program is free software; you can redistribute it and/or modify it under th
 1; # End of CPANPLUS::Dist::Gentoo::Maps
 
 __DATA__
-ANSIColor               Term-ANSIColor
 AcePerl                 Ace
 CGI-Simple              Cgi-Simple
 CGI-SpeedyCGI           SpeedyCGI
@@ -348,7 +376,6 @@ Glib                    glib-perl
 Gnome2                  gnome2-perl
 Gnome2-Canvas           gnome2-canvas
 Gnome2-GConf            gnome2-gconf
-Gnome2-Print            gnome2-print
 Gnome2-VFS              gnome2-vfs-perl
 Gnome2-Wnck             gnome2-wnck
 Gtk2                    gtk2-perl
@@ -380,7 +407,6 @@ PathTools               File-Spec
 Perl-Tidy               perltidy
 Pod-Parser              PodParser
 Regexp-Common           regexp-common
-SDL_Perl                sdl-perl
 Set-Scalar              set-scalar
 String-CRC32            string-crc32
 Text-Autoformat         text-autoformat
@@ -388,6 +414,7 @@ Text-Reform             text-reform
 Text-Template           text-template
 Text-Wrapper            text-wrapper
 Tie-EncryptedHash       tie-encryptedhash
+Time-Period             Period
 Tk                      perl-tk
 Wx                      wxperl
 XML-Sablotron           XML-Sablot
index ca48370ee7853b3cdbd90c81bdeaafe9a17adcb6..acc58f12b9bfede745c33ada3eb2fdc2f2c4f835 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 1 + 7 + 9;
+use Test::More tests => 1 + 6 + 10;
 
 use CPANPLUS::Dist::Gentoo::Maps;
 
@@ -12,7 +12,6 @@ use CPANPLUS::Dist::Gentoo::Maps;
 is nc2g('CPANPLUS-Dist-Gentoo'), 'CPANPLUS-Dist-Gentoo', 'name_c2g returns non gentooisms correctly';
 
 my %core_gentooisms = (
- 'ANSIColor'       => 'Term-ANSIColor',
  'Digest'          => 'digest-base',
  'I18N-LangTags'   => 'i18n-langtags',
  'Locale-Maketext' => 'locale-maketext',
@@ -32,6 +31,7 @@ my %cpan_gentooisms = (
  'Log-Dispatch'  => 'log-dispatch',
  'Math-Pari'     => 'math-pari',
  'Regexp-Common' => 'regexp-common',
+ 'Time-Period'   => 'Period',
  'Tk'            => 'perl-tk',
  'Wx'            => 'wxperl',
  'YAML'          => 'yaml',
index 823e98c85988b730c23442273564adb56dd54bd1..8bb8c9d0d9002c412d6ca11e3a84f98a35ef57fa 100644 (file)
@@ -12,25 +12,25 @@ use CPANPLUS::Dist::Gentoo::Maps;
  goto &CPANPLUS::Dist::Gentoo::Maps::version_c2g
 };
 
-is vc2g('1'),       '1',      "version_c2g('1')";
-is vc2g('v1'),      '1',      "version_c2g('v1')";
-is vc2g('..1'),     '1',      "version_c2g('..1')";
-is vc2g('1.0'),     '1.0',    "version_c2g('1.0')";
-is vc2g('v1.0'),    '1.0',    "version_c2g('v1.0')";
-is vc2g('1._0'),    '1.0',    "version_c2g('1._0')";
-is vc2g('1_1'),     '1_p1',   "version_c2g('1_1')";
-is vc2g('1_.1'),    '1_p1',   "version_c2g('1_.1')";
-is vc2g('1_.1._2'), '1_p1.2', "version_c2g('1_.1._2')";
-is vc2g('1_.1_2'),  '1_p12',  "version_c2g('1_.1_2')";
-is vc2g('1_.1_.2'), '1_p12',  "version_c2g('1_.1_.2')";
-
-for my $test ([ '0.12' => '0.12' ], [ '0.1234' => '0.12.34' ]) {
+is vc2g('1'),       '1.0.0',      "version_c2g('1')";
+is vc2g('v1'),      '1',          "version_c2g('v1')";
+is vc2g('..1'),     '1.0.0',      "version_c2g('..1')";
+is vc2g('1.0'),     '1.0.0',      "version_c2g('1.0')";
+is vc2g('v1.0'),    '1.0',        "version_c2g('v1.0')";
+is vc2g('1._0'),    '1.0.0_rc',   "version_c2g('1._0')";
+is vc2g('1_1'),     '11.0.0_rc',  "version_c2g('1_1')";
+is vc2g('1_.1'),    '1.100.0_rc', "version_c2g('1_.1')";
+is vc2g('1_.1._2'), '1.1.2_rc',   "version_c2g('1_.1._2')";
+is vc2g('1_.1_2'),  '1.120.0_rc', "version_c2g('1_.1_2')";
+is vc2g('1_.1_.2'), '1.1.2_rc',   "version_c2g('1_.1_.2')";
+
+for my $test ([ '0.12' => '0.12' ], [ '0.1234' => '0.1234' ]) {
  my @dists = qw<
-  ExtUtils-CBuilder
-  ExtUtils-ParseXS
-  Module-Build
-  Time-HiRes
-  Time-Local
+  ExtUtils-Install
+  File-Path
+  I18N-LangTags
+  IO
+  Time-Piece
  >;
  for my $dist (@dists) {
   is vc2g($dist, $test->[0]), $test->[1], "'version_c2g('$dist', '$test->[0]')";