Gentoo Archives: gentoo-commits

From: Kent Fredric <kentfredric@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/perl-overlay:master commit in: scripts/
Date: Mon, 31 Oct 2011 02:48:35
Message-Id: e7ba54d83323869a58d0951ae92ca0dd4a926b96.kent@gentoo
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 ){