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:51
Message-Id: b768a4ce805c6439d64dd05d4c4fe1fc422b6b2e.kent@gentoo
1 commit: b768a4ce805c6439d64dd05d4c4fe1fc422b6b2e
2 Author: Kent Fredric <kentfredric <AT> gmail <DOT> com>
3 AuthorDate: Sun Oct 30 20:19:03 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=b768a4ce
7
8 Reasonably assumptive-but-works chooser of exported dep
9
10 ---
11 scripts/show_deptree.pl | 348 ++++++++++++++++++++++++++++++++++-------------
12 1 files changed, 250 insertions(+), 98 deletions(-)
13
14 diff --git a/scripts/show_deptree.pl b/scripts/show_deptree.pl
15 index 14f221b..8b78896 100755
16 --- a/scripts/show_deptree.pl
17 +++ b/scripts/show_deptree.pl
18 @@ -36,7 +36,7 @@ if ( $flags->{help} or $singleflags->{h} ) { print help(); exit 0; }
19 # usage:
20 #
21 # gen_ebuild.pl DOY/Moose-2.0301-TRIAL
22 -#
23 +#
24 my ($release) = shift(@ARGV);
25
26 *STDOUT->binmode(':utf8');
27 @@ -46,8 +46,8 @@ my %phases;
28 my %modules;
29 my %providers;
30
31 -my $dep_phases = get_dep_phases( $release );
32 -%phases = %{ $dep_phases->{phases} };
33 +my $dep_phases = get_dep_phases($release);
34 +%phases = %{ $dep_phases->{phases} };
35 %modules = %{ $dep_phases->{modules} };
36
37 use Data::Dump qw( pp );
38 @@ -56,28 +56,29 @@ use Try::Tiny;
39 use version ();
40
41 sub provider_map {
42 - my ( $module , $version ) = @_;
43 - my @providers = metacpan->find_dist_simple( $module );
44 + my ( $module, $version ) = @_;
45 + my @providers = metacpan->find_dist_simple($module);
46 my %moduleprov;
47 -
48
49 - my %specialvs;
50 + my %specialvs;
51
52 - my $wanted_version = version->parse( $version );
53 + my $wanted_version = version->parse($version);
54
55 - for my $provider ( @providers ) {
56 + for my $provider (@providers) {
57
58 - next if $provider->{status} eq 'backpan';
59 + #next if $provider->{status} eq 'backpan';
60 next if $provider->{maturity} eq 'developer';
61 -# pp $provider;
62
63 - my $dist = $provider->{distribution};
64 + # pp $provider;
65 +
66 + my $dist = $provider->{distribution};
67 my $distv = $provider->{version} // 'undef';
68 my $gv = 'undef';
69 - if ( $distv ne 'undef' ){
70 + if ( $distv ne 'undef' ) {
71 try {
72 - $gv = gentooize_version( $distv , { lax => 1 } );
73 - } catch {
74 + $gv = gentooize_version( $distv, { lax => 1 } );
75 + }
76 + catch {
77 $gv = '???';
78 };
79 }
80 @@ -87,46 +88,41 @@ sub provider_map {
81 $moduleprov{$dist} //= [];
82
83 my @provided_matching_mods;
84 - for my $mod ( @{ $provider->{'_source.module' } } ) {
85 + for my $mod ( @{ $provider->{'_source.module'} } ) {
86 next unless $mod->{name} eq $module;
87 my $modv = $mod->{version} // 'undef';
88
89 my $got_version = version->parse( $mod->{version} );
90
91 - my $dv = $distv;
92 - #if( $distv ne $modv ) {
93 - $dv = sprintf "%s ( %s ) => \"%s\"" , $distv , $gv, $modv;
94 - #}
95 - # specials
96 -
97 - $specialvs{newest} //= {};
98 - $specialvs{oldest} //= {};
99 - $specialvs{closest} //= {};
100 + my $dv = $distv;
101 + $dv = sprintf "%s ( %s ) => \"%s\"", $distv, $gv, $modv;
102 +
103 + # specials
104 +
105 + $specialvs{newest} //= {};
106 + $specialvs{oldest} //= {};
107 + $specialvs{closest} //= {};
108 $specialvs{closestx} //= {};
109 - $specialvs{latest} = [ $dist , $dv ] if not exists $specialvs{latest};
110 + $specialvs{latest} = [ $dist, $dv ] if not exists $specialvs{latest};
111 $specialvs{newest}->{$dist} = $dv if not exists $specialvs{newest}->{$dist};
112 - $specialvs{oldest}->{$dist} = $dv;
113 + $specialvs{oldest}->{$dist} = $dv;
114
115 - # *STDERR->printf("\e[99m%s > %s , %s\n", $got_version, $wanted_version, $got_version > $wanted_version );
116 + if ( not defined $version or $got_version >= $wanted_version ) {
117
118 - if ( not defined $version or $got_version >= $wanted_version ){
119 -# *STDERR->printf("\e[99m%s > %s , %s x2\n", $got_version, $version , 1 );
120 if ( not defined $specialvs{closestx}->{$dist} ) {
121 -# *STDERR->printf("\e[99m%s > %s => set \n", $got_version, $version );
122 $specialvs{closestx}->{$dist} = $got_version;
123 - $specialvs{closest}->{$dist} = $dv;
124 - } else {
125 - if( $specialvs{closestx}->{$dist} >= $got_version ) {
126 -# *STDERR->printf("\e[99m%s > %s => << \n", $got_version, $version );
127 -
128 + $specialvs{closest}->{$dist} = $dv;
129 + }
130 + else {
131 + if ( $specialvs{closestx}->{$dist} >= $got_version ) {
132 $specialvs{closestx}->{$dist} = $got_version;
133 - $specialvs{closest}->{$dist} = $dv;
134 -
135 + $specialvs{closest}->{$dist} = $dv;
136 }
137 }
138 }
139 - #
140 -
141 +
142 + #
143 +
144 push @provided_matching_mods, $dv
145 if $mod->{name} eq $module;
146 }
147 @@ -135,108 +131,264 @@ sub provider_map {
148 return \%moduleprov, \%specialvs;
149 }
150
151 +sub handle_declaration {
152 + my ( $release, $module, $declaration, $output ) = @_;
153
154 -for my $module ( keys %modules ) {
155 - for my $declaration ( @{ $modules{$module} } ) {
156 + my $depstring = $module;
157 + if ( $declaration->[1] ne '0.0.0' ) {
158 + $depstring .= " " . $declaration->[0] . " ( " . $declaration->[1] . " ) ";
159 + }
160
161 - my $depstring = $module;
162 - if ( $declaration->[1] ne '0.0.0' ) {
163 - $depstring .= " " . $declaration->[0] . " ( " . $declaration->[1] . " ) " ;
164 - }
165 + my $want_string = "$release -> " . $declaration->[2] . " " . $declaration->[3] . " " . $depstring;
166
167 - my $want_string = "$release -> " . $declaration->[2] . " " . $declaration->[3] . " " . $depstring;
168 + my ( $moduleprov, $specialvs ) = provider_map( $module, $declaration->[0] );
169
170 -
171 - my ( $moduleprov, $specialvs ) = provider_map( $module , $declaration->[0]);
172 + my $to_pkg = sub {
173 + my $pkg = shift;
174 + my $xpkg = gentooize_pkg($pkg);
175 + if ( $declaration->[1] eq '0.0.0' ) {
176 + return $xpkg;
177 + }
178 + return '\\>=' . $xpkg . '-' . $declaration->[1];
179 + };
180
181 - my $pc = scalar keys %$moduleprov;
182 + my $pc = scalar keys %$moduleprov;
183
184 - my $multi = ( $pc > 1 );
185 - my $any = ( $pc > 0 );
186 + my $multi = ( $pc > 1 );
187 + my $any = ( $pc > 0 );
188
189 - *STDOUT->printf("\e[1;93m%s\e[0m\n", $want_string );
190 + $output->printf( "\e[1;93m%s\e[0m\n", $want_string );
191
192 -
193 + if ( not $any ) {
194 + return $output->printf( "%sWARNING: NO PROVIDER FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" );
195 + }
196 + if ($multi) {
197 + $output->printf( "%sWARNING: MULTIPLE PROVIDERS FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" );
198 + }
199
200 - if ( not $any ) {
201 - *STDOUT->printf("%sWARNING: NO PROVIDER FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" );
202 - next;
203 - }
204 - if( $multi ){
205 - *STDOUT->printf("%sWARNING: MULTIPLE PROVIDERS FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" );
206 + my $indent = " \e[1;92m*";
207 + $indent = " \e[1;91m*" if $multi;
208 +
209 + $output->printf(
210 + "%s\e[1;95m latest: %s => %s ( %s )\n",
211 + $indent,
212 + @{ $specialvs->{latest} },
213 + $to_pkg->( $specialvs->{latest}->[0] )
214 + );
215 +
216 + for my $prov ( keys %{$moduleprov} ) {
217 + my $prefix = $depstring . ' in ' . $prov;
218 + my $lines = xwrap( join q[, ], @{ $moduleprov->{$prov} } );
219 + my (@slines) = split /$/m, $lines;
220 + $_ =~ s/[\r\n]*//m for @slines;
221 + $output->printf( " %s%s -> %s%s (%s)\n", "\e[1;92m", $depstring, "\e[0m\e[92m", $prov, gentooize_pkg($prov) );
222 + $output->printf( "%s newest: %s\e[0m\n", $indent, $specialvs->{newest}->{$prov} );
223 + $output->printf( "%s oldest: %s\e[0m\n", $indent, $specialvs->{oldest}->{$prov} );
224 + my $v = $specialvs->{closest}->{$prov};
225 + if ( not defined $v ) { $v = 'undef' }
226 + $output->printf( "%s closest: %s\e[0m\n", $indent, $v );
227 +
228 + for (@slines) {
229 +
230 + $output->printf( "%s %s%s -> %s%s\n", $indent, "\e[1;94m", $prov, "\e[0m\e[94m", $_ );
231 }
232 + }
233 + if ($multi) {
234 + $output->print(" \e[1;91m-\n\n");
235 + }
236 + else {
237 + $output->print(" \e[1;92m-\n\n");
238 + }
239
240 +}
241
242 - my $indent = " \e[1;92m*";
243 - $indent = " \e[1;91m*" if $multi;
244 -
245 - *STDOUT->printf("%s latest: %s => %s\n", $indent, @{ $specialvs->{latest} } );
246 -
247 - for my $prov ( keys %{$moduleprov} ) {
248 - my $prefix = $depstring . ' in ' . $prov;
249 - my $lines = xwrap( join q[, ], @{$moduleprov->{ $prov } } );
250 - my ( @slines ) = split /$/m , $lines;
251 - $_ =~ s/[\r\n]*//m for @slines;
252 - *STDOUT->printf(" %s%s -> %s%s\n", "\e[1;92m", $depstring, "\e[0m\e[92m" ,$prov);
253 - *STDOUT->printf("%s newest: %s\e[0m\n", $indent, $specialvs->{newest}->{$prov});
254 - *STDOUT->printf("%s oldest: %s\e[0m\n", $indent, $specialvs->{oldest}->{$prov});
255 - my $v = $specialvs->{closest}->{$prov};
256 - if( not defined $v ){ $v = 'undef' }
257 - *STDOUT->printf("%s closest: %s\e[0m\n", $indent, $v );
258 - for ( @slines ) {
259 +sub virtual($) {
260 + my $i = shift;
261 + return 'virtual/perl-' . $i;
262 +}
263
264 - *STDOUT->printf("%s %s%s -> %s%s\n", $indent, "\e[1;94m", $prov , "\e[0m\e[94m", $_ );
265 - }
266 - }
267 - if ( $multi ){
268 - *STDOUT->print(" \e[1;91m-\n\n");
269 - } else {
270 - *STDOUT->print(" \e[1;92m-\n\n");
271 - }
272 +sub gentooize_pkg {
273 + my $pkg = shift;
274 + my %vmap = (
275 + 'perl' => 'dev-lang/perl',
276 + 'perl_debug' => 'dev-lang/perl_debug', # doesn't actually exist
277 + (
278 + map { $_, virtual $_ }
279 + qw(
280 + Archive-Tar
281 + Attribute-Handlers
282 + AutoLoader
283 + CGI
284 + Class-ISA
285 + Compress-Raw-Bzip2
286 + Compress-Raw-Zlib
287 + CPAN-Meta
288 + CPAN-Meta-YAML
289 + Data-Dumper
290 + DB_File
291 + Digest-MD5
292 + Digest-SHA
293 + Encode
294 + ExtUtils-CBuilder
295 + ExtUtils-Command
296 + ExtUtils-Install
297 + ExtUtils-MakeMaker
298 + ExtUtils-Manifest
299 + ExtUtils-ParseXS
300 + File-Path
301 + File-Temp
302 + Filter
303 + Getopt-Long
304 + i18n-langtags
305 + IO
306 + IO-Compress
307 + IO-Zlib
308 + IPC-Cmd
309 + JSON-PP
310 + libnet
311 + Locale-MakeText-Simple
312 + Math-BigInt
313 + Math-BigInt-FastCalc
314 + Memoize
315 + MIME-Base64
316 + Module-Build
317 + Module-CoreList
318 + Module-Load
319 + Module-Load-Conditional
320 + Module-Loaded
321 + Module-Metadata
322 + Module-Pluggable
323 + Package-Constants
324 + Params-Check
325 + parent
326 + Parse-CPAN-Meta
327 + Perl-OSType
328 + Pod-Escapes
329 + podlators
330 + Pod-Simple
331 + Safe
332 + Scalar-List-Utils
333 + Storable
334 + Switch
335 + Sys-Syslog
336 + Term-ANSIColor
337 + Test
338 + Test-Harness
339 + Test-Simple
340 + Text-Balanced
341 + Text-Tabs+Wrap
342 + Thread-Queue
343 + threads
344 + Thread-Semaphore
345 + threads-shared
346 + Time-HiRes
347 + Time-Local
348 + Time-Piece
349 + version
350 + Version-Requirements
351 + XSLoader
352 + )
353 + ),
354 + 'Digest' => virtual 'digest-base',
355 + 'PathTools' => virtual 'File-Spec',
356 + 'Locale-MakeText' => virtual 'locale-maketext',
357 + 'Net-Ping' => virtual 'net-ping',
358 + 'Pod-Parser' => virtual 'PodParser',
359 + ## Overlay
360 + (
361 + map { $_, virtual $_ }
362 + qw(
363 + Archive-Extract
364 + B-Debug
365 + B-Lint
366 + constant
367 + CPAN
368 + CPANPLUS
369 + CPANPLUS-Dist-Build
370 + Devel-DProf
371 + Devel-PPPort
372 + Devel-SelfStubber
373 + Dumpvalue
374 + ExtUtils-Constant
375 + ExtUtils-MakeMaker
376 + File-Fetch
377 + Filter-Simple
378 + HTTP-Tiny
379 + i18n-langtags
380 + if
381 + IPC-SysV
382 + Log-Message
383 + Log-Message-Simple
384 + Math-Complex
385 + Module-CoreList
386 + NEXT
387 + Object-Accessor
388 + Pod-LaTeX
389 + Pod-Perldoc
390 + Pod-Plainer
391 + SelfLoader
392 + Term-UI
393 + Unicode-Collate
394 + Unicode-Normalize
395 + )
396 + ),
397 + );
398 +
399 + if ( exists $vmap{$pkg} ) {
400 + return $vmap{$pkg};
401 + }
402 + return 'dev-perl/' . $pkg;
403 +}
404
405 -}}
406 +for my $module ( keys %modules ) {
407 + for my $declaration ( @{ $modules{$module} } ) {
408 + handle_declaration( $release, $module, $declaration, *STDOUT );
409 + }
410 +}
411
412 use Data::Dump qw( pp );
413 use JSON qw( to_json encode_json );
414 +
415 #say pp( \%modules,);# { pretty => 1 } );
416 exit 1;
417
418 sub xwrap {
419 - local $Text::Wrap::break = qr/,/;
420 + local $Text::Wrap::break = qr/,/;
421 local $Text::Wrap::overflow = 'huge';
422 - local $Text::Wrap::columns = 128;
423 + local $Text::Wrap::columns = 128;
424 $Text::Wrap::overflow = 'huge';
425 my $pre = " ";
426 - my $lines = wrap( $pre , $pre, @_ );
427 + my $lines = wrap( $pre, $pre, @_ );
428 return $lines;
429 }
430 +
431 sub clines {
432 - my ( $c, $prefix , $lines ) = @_ ;
433 + my ( $c, $prefix, $lines ) = @_;
434 $lines =~ s/^/$prefix>>$c/mg;
435 $lines =~ s/$/\e[0m/mg;
436 return $lines;
437 }
438
439 sub get_dep_phases {
440 - my ( $release ) = shift;
441 + my ($release) = shift;
442 my %phases;
443 my %modules;
444 my ( $result, ) = get_deps($release);
445 for my $dep ( @{ $result->{dependency} } ) {
446 - my $phase = $dep->{phase};
447 - my $module = $dep->{module};
448 + my $phase = $dep->{phase};
449 + my $module = $dep->{module};
450 my $required = ( $dep->{relationship} eq 'requires' );
451
452 next unless $required;
453 - next if $phase eq 'develop';
454 + next if $phase eq 'develop';
455
456 - $phases{$phase} //= [];
457 + $phases{$phase} //= [];
458 $modules{$module} //= [];
459
460 my $v = gentooize_version( $dep->{version}, { lax => 1 } );
461
462 - push @{ $phases{$phase} }, [ $dep->{module} , $dep->{version} , $v, $dep->{relationship} ];
463 - push @{ $modules{$module} }, [ $dep->{version}, $v, $dep->{phase} , $dep->{relationship} ];
464 + push @{ $phases{$phase} }, [ $dep->{module}, $dep->{version}, $v, $dep->{relationship} ];
465 + push @{ $modules{$module} }, [ $dep->{version}, $v, $dep->{phase}, $dep->{relationship} ];
466 }
467 return { phases => \%phases, modules => \%modules };
468 }
469 @@ -258,7 +410,7 @@ sub get_deps {
470
471 $release =~ qr{^([^/]+)/(.*$)};
472 ( $author, $distrelease ) = ( "$1", "$2" );
473 - return metacpan->find_release( $author, $distrelease );
474 + return metacpan->find_release( $author, $distrelease );
475 }
476
477 sub pkg_for_module {