1 |
commit: e7ba54d83323869a58d0951ae92ca0dd4a926b96 |
2 |
Author: Kent Fredric <kentfredric <AT> gmail <DOT> com> |
3 |
AuthorDate: Fri Oct 28 03:57:09 2011 +0000 |
4 |
Commit: Kent Fredric <kentfredric <AT> gmail <DOT> com> |
5 |
CommitDate: Mon Oct 31 02:45:47 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/perl-overlay.git;a=commit;h=e7ba54d8 |
7 |
|
8 |
Now shows the oldest version, the newest version, and the closest |
9 |
version. |
10 |
|
11 |
Generally speaking, when declaring a dep, you'll want the one with the |
12 |
"closest version" as your specifier for ">=" |
13 |
|
14 |
--- |
15 |
scripts/gen_ebuild.pl | 88 ++++++++++++++++++++++++++++++++++++++++-------- |
16 |
1 files changed, 73 insertions(+), 15 deletions(-) |
17 |
|
18 |
diff --git a/scripts/gen_ebuild.pl b/scripts/gen_ebuild.pl |
19 |
index 1623bb8..867127b 100755 |
20 |
--- a/scripts/gen_ebuild.pl |
21 |
+++ b/scripts/gen_ebuild.pl |
22 |
@@ -52,35 +52,87 @@ my $dep_phases = get_dep_phases( $release ); |
23 |
|
24 |
use Data::Dump qw( pp ); |
25 |
use JSON qw( to_json encode_json ); |
26 |
+use Try::Tiny; |
27 |
+use version (); |
28 |
|
29 |
sub provider_map { |
30 |
- my ( $module ) = shift; |
31 |
+ my ( $module , $version ) = @_; |
32 |
my @providers = metacpan->find_dist_simple( $module ); |
33 |
my %moduleprov; |
34 |
- |
35 |
+ |
36 |
+ |
37 |
+ my %specialvs; |
38 |
+ |
39 |
+ my $wanted_version = version->parse( $version ); |
40 |
+ |
41 |
for my $provider ( @providers ) { |
42 |
|
43 |
- next if $provider->{status} eq 'backpan'; |
44 |
- next if $provider->{maturity} eq 'developer'; |
45 |
+ #next if $provider->{status} eq 'backpan'; |
46 |
+ #next if $provider->{maturity} eq 'developer'; |
47 |
# pp $provider; |
48 |
|
49 |
my $dist = $provider->{distribution}; |
50 |
my $distv = $provider->{version} // 'undef'; |
51 |
+ my $gv = 'undef'; |
52 |
+ if ( $distv ne 'undef' ){ |
53 |
+ try { |
54 |
+ $gv = gentooize_version( $distv , { lax => 1 } ); |
55 |
+ } catch { |
56 |
+ $gv = '???'; |
57 |
+ }; |
58 |
+ } |
59 |
+ |
60 |
+ #next if $gv eq '???'; |
61 |
+ |
62 |
$moduleprov{$dist} //= []; |
63 |
+ |
64 |
my @provided_matching_mods; |
65 |
for my $mod ( @{ $provider->{'_source.module' } } ) { |
66 |
next unless $mod->{name} eq $module; |
67 |
my $modv = $mod->{version} // 'undef'; |
68 |
- my $dv = $distv; |
69 |
- if( $distv ne $modv ) { |
70 |
- $dv = $distv . " => " . '"' . $modv . '"'; |
71 |
+ |
72 |
+ my $got_version = version->parse( $mod->{version} ); |
73 |
+ |
74 |
+ my $dv = $distv; |
75 |
+ #if( $distv ne $modv ) { |
76 |
+ $dv = sprintf "%s ( %s ) => \"%s\"" , $distv , $gv, $modv; |
77 |
+ #} |
78 |
+ # specials |
79 |
+ |
80 |
+ $specialvs{newest} //= {}; |
81 |
+ $specialvs{oldest} //= {}; |
82 |
+ $specialvs{closest} //= {}; |
83 |
+ $specialvs{closestx} //= {}; |
84 |
+ |
85 |
+ $specialvs{newest}->{$dist} = $dv if not exists $specialvs{newest}->{$dist}; |
86 |
+ $specialvs{oldest}->{$dist} = $dv; |
87 |
+ |
88 |
+ # *STDERR->printf("\e[99m%s > %s , %s\n", $got_version, $wanted_version, $got_version > $wanted_version ); |
89 |
+ |
90 |
+ if ( not defined $version or $got_version >= $wanted_version ){ |
91 |
+# *STDERR->printf("\e[99m%s > %s , %s x2\n", $got_version, $version , 1 ); |
92 |
+ if ( not defined $specialvs{closestx}->{$dist} ) { |
93 |
+# *STDERR->printf("\e[99m%s > %s => set \n", $got_version, $version ); |
94 |
+ $specialvs{closestx}->{$dist} = $got_version; |
95 |
+ $specialvs{closest}->{$dist} = $dv; |
96 |
+ } else { |
97 |
+ if( $specialvs{closestx}->{$dist} >= $got_version ) { |
98 |
+# *STDERR->printf("\e[99m%s > %s => << \n", $got_version, $version ); |
99 |
+ |
100 |
+ $specialvs{closestx}->{$dist} = $got_version; |
101 |
+ $specialvs{closest}->{$dist} = $dv; |
102 |
+ |
103 |
+ } |
104 |
+ } |
105 |
} |
106 |
+ # |
107 |
+ |
108 |
push @provided_matching_mods, $dv |
109 |
if $mod->{name} eq $module; |
110 |
} |
111 |
push @{ $moduleprov{$dist} }, @provided_matching_mods; |
112 |
} |
113 |
- return \%moduleprov; |
114 |
+ return \%moduleprov, \%specialvs; |
115 |
} |
116 |
for my $module ( keys %modules ) { |
117 |
for my $declaration ( @{ $modules{$module} } ) { |
118 |
@@ -93,9 +145,9 @@ for my $module ( keys %modules ) { |
119 |
my $want_string = "$release -> " . $declaration->[2] . " " . $declaration->[3] . " " . $depstring; |
120 |
|
121 |
|
122 |
- my %moduleprov = %{ provider_map( $module ) }; |
123 |
+ my ( $moduleprov, $specialvs ) = provider_map( $module , $declaration->[0]); |
124 |
|
125 |
- my $pc = scalar keys %moduleprov; |
126 |
+ my $pc = scalar keys %$moduleprov; |
127 |
|
128 |
my $multi = ( $pc > 1 ); |
129 |
my $any = ( $pc > 0 ); |
130 |
@@ -112,17 +164,23 @@ for my $module ( keys %modules ) { |
131 |
*STDERR->printf("%sWARNING: MULTIPLE PROVIDERS FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" ); |
132 |
} |
133 |
|
134 |
- for my $prov ( keys %moduleprov ) { |
135 |
+ my $indent = " \e[1;92m*"; |
136 |
+ $indent = " \e[1;91m*" if $multi; |
137 |
+ |
138 |
+ for my $prov ( keys %{$moduleprov} ) { |
139 |
my $prefix = $depstring . ' in ' . $prov; |
140 |
- my $lines = xwrap( join q[, ], @{$moduleprov{ $prov } } ); |
141 |
+ my $lines = xwrap( join q[, ], @{$moduleprov->{ $prov } } ); |
142 |
my ( @slines ) = split /$/m , $lines; |
143 |
$_ =~ s/[\r\n]*//m for @slines; |
144 |
*STDERR->printf(" %s%s -> %s%s\n", "\e[1;92m", $depstring, "\e[0m\e[92m" ,$prov); |
145 |
+ *STDERR->printf("%s newest: %s\e[0m\n", $indent, $specialvs->{newest}->{$prov}); |
146 |
+ *STDERR->printf("%s oldest: %s\e[0m\n", $indent, $specialvs->{oldest}->{$prov}); |
147 |
+ my $v = $specialvs->{closest}->{$prov}; |
148 |
+ if( not defined $v ){ $v = 'undef' } |
149 |
+ *STDERR->printf("%s closest: %s\e[0m\n", $indent, $v ); |
150 |
for ( @slines ) { |
151 |
- *STDERR->print(" \e[1;91m*") if $multi; |
152 |
- *STDERR->print(" \e[1;92m*") if not $multi; |
153 |
|
154 |
- *STDERR->printf(" %s%s -> %s%s\n", "\e[1;94m", $prov , "\e[0m\e[94m", $_ ); |
155 |
+ *STDERR->printf("%s %s%s -> %s%s\n", $indent, "\e[1;94m", $prov , "\e[0m\e[94m", $_ ); |
156 |
} |
157 |
} |
158 |
if ( $multi ){ |