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/lib/dep/handler/, scripts/, scripts/lib/
Date: Mon, 31 Oct 2011 02:48:56
Message-Id: d38f144656ae78ed3d3d0103ad3436de14b89113.kent@gentoo
1 commit: d38f144656ae78ed3d3d0103ad3436de14b89113
2 Author: Kent Fredric <kentfredric <AT> gmail <DOT> com>
3 AuthorDate: Mon Oct 31 02:35:57 2011 +0000
4 Commit: Kent Fredric <kentfredric <AT> gmail <DOT> com>
5 CommitDate: Mon Oct 31 02:45:48 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/perl-overlay.git;a=commit;h=d38f1446
7
8 Ebuild Output target
9
10 ---
11 scripts/gen_ebuild.pl | 191 +++++++++++++++++++++++++++++
12 scripts/lib/dep/handler/bashcode.pm | 80 ++++++++++++
13 scripts/lib/deptools.pm | 4 +-
14 scripts/pvlist.pl | 228 +++++++++++++++++++++++++++++++++++
15 scripts/show_deptree.pl | 9 +-
16 5 files changed, 506 insertions(+), 6 deletions(-)
17
18 diff --git a/scripts/gen_ebuild.pl b/scripts/gen_ebuild.pl
19 new file mode 100755
20 index 0000000..4f09d25
21 --- /dev/null
22 +++ b/scripts/gen_ebuild.pl
23 @@ -0,0 +1,191 @@
24 +#!/usr/bin/env perl
25 +
26 +eval 'echo "Called with something not perl"' && exit 1 # Non-Perl protection.
27 + if 0;
28 +
29 +use 5.14.2;
30 +use strict;
31 +use warnings;
32 +use FindBin;
33 +use lib "$FindBin::Bin/lib";
34 +use env::gentoo::perl_experimental;
35 +use utf8;
36 +
37 +my $env = env::gentoo::perl_experimental->new();
38 +my $flags;
39 +my $singleflags;
40 +
41 +@ARGV = grep { defined } map {
42 + $_ =~ /^--(\w+)/
43 + ? do { $flags->{$1}++; undef }
44 + : do {
45 + $_ =~ /^-(\w+)/
46 + ? do { $singleflags->{$1}++; undef }
47 + : do { $_ }
48 + }
49 +} @ARGV;
50 +
51 +if ( $flags->{help} or $singleflags->{h} ) { print help(); exit 0; }
52 +
53 +# FILENAME: show_deptree.pl
54 +# CREATED: 25/10/11 12:15:51 by Kent Fredric (kentnl) <kentfredric@×××××.com>
55 +# ABSTRACT: show the metadata harvested for a given packages install tree.
56 +
57 +# usage:
58 +#
59 +# gen_ebuild.pl DOY/Moose-2.0301-TRIAL
60 +#
61 +sub help {
62 + return <<'EOF';
63 +gen_ebuild.pl
64 +
65 +USAGE:
66 +
67 + show_deptree.pl DOY/Moose-2.0301-TRIAL
68 +
69 +EOF
70 +}
71 +my ($release) = shift(@ARGV);
72 +
73 +
74 +
75 +*STDOUT->binmode(':utf8');
76 +*STDERR->binmode(':utf8');
77 +
78 +require deptools;
79 +
80 +my ( $release_info ) = deptools::get_deps( $release );
81 +my $dep_phases = deptools::get_dep_phases($release);
82 +
83 +my @queue;
84 +
85 +for my $module ( keys %{ $dep_phases->{modules} } ) {
86 + for my $declaration ( @{ $dep_phases->{modules}->{$module} } ) {
87 + push @queue, [ $module, $declaration ];
88 + }
89 +}
90 +my @squeue =
91 + sort { $a->[1]->[2] cmp $b->[1]->[2] or $a->[1]->[3] cmp $b->[1]->[3] or $a->[0] cmp $b->[0] } @queue;
92 +
93 +
94 +require dep::handler::stdout;
95 +require dep::handler::bashcode;
96 +
97 +my $handler = dep::handler::stdout->new();
98 +my $handler2 = dep::handler::bashcode->new();
99 +
100 +
101 +for my $qi (@squeue) {
102 + deptools::dispatch_dependency_handler( $release, @{$qi}, $handler2 );
103 +}
104 +
105 +my $depends = [];
106 +my $rdepends = [];
107 +require POSIX;
108 +my $year = POSIX::strftime('%Y', gmtime);
109 +
110 +my $path = deptools::gentooize_pkg($release_info->{distribution} );
111 +require Gentoo::PerlMod::Version;
112 +my $version = Gentoo::PerlMod::Version::gentooize_version( $release_info->{version} , { lax => 1 } );
113 +$env->root->subdir($path)->mkpath;
114 +my $file = $env->root->subdir($path)->file($release_info->{distribution} . '-' . $version . '.ebuild' );
115 +
116 +my ( $fh ) = $file->openw;
117 +say "Writing $file";
118 +$fh->say("# Copyright 1999-$year Gentoo Foundation");
119 +$fh->say("# Distributed under the terms of the GNU General Public License v2");
120 +$fh->say("# \$Header: \$");
121 +$fh->say("EAPI=4");
122 +$fh->say("MODULE_AUTHOR=" . $release_info->{author});
123 +$fh->say("MODULE_VERSION=" . $release_info->{version});
124 +$fh->say('inherit perl-module');
125 +$fh->say('');
126 +
127 +$fh->say('DESCRIPTION="' . quotemeta( $release_info->{abstract} ) . '"');
128 +
129 +my $lics = [];
130 +my $licmap = {
131 + perl_5 => [qw( Artistic GPL-2 )],
132 +};
133 +
134 +for my $lic ( @{ $release_info->{license} } ){
135 + if ( exists $licmap->{$lic} ){
136 + push @$lics, @{ $licmap->{$lic}};
137 + } else {
138 + warn "No Gentoo maping listed for $lic license type";
139 + }
140 +}
141 +
142 +if( scalar @$lics == 1 ){
143 + $fh->say('LICENSE=" ' . $lics->[0] . '"');
144 +} elsif ( scalar @$lics > 1 ){
145 + $fh->say('LICENSE=" || ( ' . (join q{ } , @$lics) . ' )"');
146 +} else {
147 + $fh->say('LICENSE=""');
148 +}
149 +$fh->say('SLOT="0"');
150 +$fh->say('KEYWORDS="~amd64 ~x86"');
151 +if( $handler2->has_tdeps ) {
152 + $fh->say('IUSE="test"');
153 +} else {
154 + $fh->say('IUSE=""');
155 +}
156 +
157 +if ( $handler2->has_cdeps ) {
158 + $fh->say('perl_meta_configure() {');
159 + for my $dep ( @{ $handler2->cdeps } ) {
160 + $fh->say("\t# " . $dep->{dep});
161 + $fh->say("\techo " . $dep->{install});
162 + }
163 + $fh->say('}');
164 + push @{ $depends }, '$(perl_meta_configure)';
165 +}
166 +if ( $handler2->has_bdeps ) {
167 + $fh->say('perl_meta_build() {');
168 + for my $dep ( @{ $handler2->bdeps } ) {
169 + $fh->say("\t# " . $dep->{dep});
170 + $fh->say("\techo " . $dep->{install});
171 + }
172 + $fh->say('}');
173 + push @{ $depends }, '$(perl_meta_build)';
174 +
175 +}
176 +if ( $handler2->has_rdeps ) {
177 + $fh->say('perl_meta_runtime() {');
178 + for my $dep ( @{ $handler2->rdeps } ) {
179 + $fh->say("\t# " . $dep->{dep});
180 + $fh->say("\techo " . $dep->{install});
181 + }
182 + $fh->say('}');
183 + push @{ $depends }, '$(perl_meta_runtime)';
184 + push @{ $rdepends }, '$(perl_meta_runtime)';
185 +
186 +}
187 +if ( $handler2->has_tdeps ) {
188 + $fh->say('perl_meta_test() {');
189 + for my $dep ( @{ $handler2->tdeps } ) {
190 + $fh->say("\t# " . $dep->{dep});
191 + $fh->say("\techo " . $dep->{install});
192 + }
193 + $fh->say('}');
194 + push @{ $depends }, 'test? ( $(perl_meta_test) )';
195 +}
196 +
197 +$fh->say("DEPENDS=\"\n" . ( join qq{\n}, map { "\t$_" } @{$depends} ) . "\n\"");
198 +$fh->say("RDEPENDS=\"\n" . ( join qq{\n}, map { "\t$_" } @{$rdepends} ) . "\n\"");
199 +$fh->say("SRC_TEST=\"do\"");
200 +
201 +#say pp( \%modules,);# { pretty => 1 } );
202 +exit 1;
203 +
204 +sub pkg_for_module {
205 + my ($module) = shift;
206 +
207 +}
208 +
209 +sub gen_dep {
210 + state $template = qq{\t# %s%s\n\techo %s\n};
211 + my ( $module, $version ) = @_;
212 +
213 +}
214 +
215
216 diff --git a/scripts/lib/dep/handler/bashcode.pm b/scripts/lib/dep/handler/bashcode.pm
217 new file mode 100644
218 index 0000000..eb526e7
219 --- /dev/null
220 +++ b/scripts/lib/dep/handler/bashcode.pm
221 @@ -0,0 +1,80 @@
222 +use strict;
223 +use warnings;
224 +package dep::handler::bashcode;
225 +# FILENAME: bashcode.pm
226 +# CREATED: 31/10/11 14:22:06 by Kent Fredric (kentnl) <kentfredric@×××××.com>
227 +# ABSTRACT: Bash code dep handler
228 +
229 +use Moose;
230 +
231 +has 'tdeps' => (is => 'rw',isa => 'ArrayRef', lazy => 1, predicate => 'has_tdeps' , default => sub { [] } );
232 +has 'rdeps' => (is => 'rw', isa => 'ArrayRef', lazy => 1, predicate => 'has_rdeps', default => sub { [] } );
233 +has 'cdeps' => (is => 'rw', isa => 'ArrayRef', lazy => 1, predicate => 'has_cdeps', default => sub { [] } );
234 +has 'bdeps' => (is => 'rw', isa => 'ArrayRef', lazy => 1, predicate => 'has_bdeps', default => sub { [] } );
235 +
236 +has dep_current => ( is => 'rw' , clearer => 'clear_current' );
237 +
238 +sub begin_dep {
239 + my ( $self, $release, $module, $declaration ) = @_;
240 + $self->dep_current(
241 + {
242 + for => $module,
243 + wanted => $declaration->[0],
244 + for_phase => $declaration->[2],
245 + priority => $declaration->[3],
246 + }
247 + );
248 +}
249 +
250 +sub evt_not_any {
251 + my ( $self, $module, $declaration ) = @_;
252 + my $mesg = "No provider: $module ";
253 + $mesg .= $declaration->[0] if defined $declaration->[0];
254 + warn($mesg . "\n");
255 +}
256 +sub evt_multi {
257 + my ( $self, $module, $declaration ) = @_;
258 + my $mesg = "Mutli provider: $module ";
259 + $mesg .= $declaration->[0] if defined $declaration->[0];
260 + warn($mesg . "\n");
261 +}
262 +
263 +sub set_latest {
264 + my ( $self, $dep, $pkg ) = @_;
265 + $self->dep_current->{choose} = $pkg;
266 +}
267 +
268 +sub perl_dep {
269 + my ( $self, $module, $declaration , $pkg ) = @_ ;
270 + $self->dep_current->{choose} = $pkg;
271 +}
272 +
273 +sub provider_group {
274 + my ( $self, $data ) = @_;
275 +}
276 +
277 +sub done {
278 + my ( $self, $module, $declaration ) = @_;
279 + my $dc = $self->dep_current;
280 + # *STDOUT->say( $dc->{for_phase} . ' ' . $dc->{priority} . ' ' . $dc->{for} . ' ' . $dc->{wanted} . ' ' . $dc->{choose} );
281 + $self->clear_current;
282 + return if ( $dc->{for_phase} eq 'develop' or $dc->{priority} ne 'requires' );
283 +
284 + my $rec = { dep => $dc->{for} , install => $dc->{choose} };
285 + if( $dc->{wanted} ){
286 + require Gentoo::PerlMod::Version;
287 + $rec->{dep} .= ' ' . $dc->{wanted} . ' ( ' . Gentoo::PerlMod::Version::gentooize_version( $dc->{wanted} , { lax => 1 }) . ' )';
288 + }
289 +
290 + push @{ $self->bdeps }, $rec if $dc->{for_phase} eq 'build';
291 + push @{ $self->cdeps }, $rec if $dc->{for_phase} eq 'configure';
292 + push @{ $self->tdeps }, $rec if $dc->{for_phase} eq 'test';
293 + push @{ $self->rdeps }, $rec if $dc->{for_phase} eq 'runtime';
294 + return;
295 +}
296 +
297 +no Moose;
298 +__PACKAGE__->meta->make_immutable;
299 +1;
300 +
301 +
302
303 diff --git a/scripts/lib/deptools.pm b/scripts/lib/deptools.pm
304 index a4cdc51..a38776d 100644
305 --- a/scripts/lib/deptools.pm
306 +++ b/scripts/lib/deptools.pm
307 @@ -146,8 +146,8 @@ sub get_dep_phases {
308 my $module = $dep->{module};
309 my $required = ( $dep->{relationship} eq 'requires' );
310
311 - next unless $required;
312 - next if $phase eq 'develop';
313 + #next unless $required;
314 + #next if $phase eq 'develop';
315
316 $phases{$phase} //= [];
317 $modules{$module} //= [];
318
319 diff --git a/scripts/pvlist.pl b/scripts/pvlist.pl
320 new file mode 100644
321 index 0000000..b248fa0
322 --- /dev/null
323 +++ b/scripts/pvlist.pl
324 @@ -0,0 +1,228 @@
325 +#!/usr/bin/env perl
326 +use 5.14.2;
327 +use strict;
328 +use warnings;
329 +
330 +# FILENAME: pvlist.pl
331 +# CREATED: 16/10/11 20:16:03 by Kent Fredric (kentnl) <kentfredric@×××××.com>
332 +# ABSTRACT: Show version history for interesting perl dists
333 +
334 +use MetaCPAN::API;
335 +use CPAN::Changes;
336 +
337 +my $mcpan = MetaCPAN::API->new();
338 +
339 +my (@want_dists) = qw(
340 + App-cpanminus
341 + App-perlbrew
342 + Archive-Peek
343 + B-Hooks-OP-Check-EntersubForCV
344 + Business-Tax-VAT-Validation
345 + Catalyst-Action-REST
346 + Catalyst-Log-Log4perl
347 + Config-GitLike
348 + DBD-CSV
349 + Data-Handle
350 + DateTime-TimeZone-SystemV
351 + DateTime-TimeZone-Tzfile
352 + Devel-PatchPerl
353 + Dist-Zilla-Plugin-GithubMeta
354 + Dist-Zilla-Plugin-Test-Compile
355 + Dist-Zilla-Plugin-Test-Perl-Critic
356 + Dist-Zilla-Plugin-Twitter
357 + Dist-Zilla-PluginBundle-Author-KENTNL
358 + Filesys-Notify-Simple
359 + Filter-Simple
360 + FindBin-libs
361 + Git-Wrapper
362 + HTML-FormHandler
363 + HTML-Packer
364 + HTML-Template-Pro
365 + IO-Interactive
366 + JavaScript-Packer
367 + KiokuDB-Backend-DBI
368 + Lexical-Types
369 + Lingua-EN-Inflect-Phrase
370 + Module-Extract-Namespaces
371 + Module-Runtime
372 + MojoMojo
373 + Mojolicious
374 + MooseX-SetOnce
375 + MooseX-Types-Structured
376 + Net-Google-DataAPI
377 + Net-IPv4Addr
378 + ORLite-Migraate
379 + Object-ID
380 + POE-Component-SSLify
381 + Padre-Plugin-Vi
382 + Plack
383 + Plack-Middleware-ReverseProxy
384 + Pod-Elemental-Transformer-WikiDoc
385 + Scope-Upper
386 + Spark-Form
387 + Task-Spark-Form
388 + Test-LeakTrace
389 + Test-SharedFork
390 + Test-WWW-Mechanize-Catalyst
391 + Web-Scraper
392 + XML-RSS_LibXML
393 + XML-Smart
394 + XML-XSPF
395 + YAML-LibYAML
396 + autobox-Core
397 + autovivification
398 + perl5i
399 + CPANPLUS
400 + CPANPLUS-Dist-Build
401 + Devel-PPPort
402 + ExtUtils-MakeMaker
403 + Unicode-Collate
404 + Catalyst-Runtime
405 + Moose
406 + Class-MOP
407 + perl
408 + Dist-Zilla
409 + Package-Stash
410 + MetaCPAN-API
411 + Class-Load
412 + Dist-Zilla-PluginBundle-RJBS
413 +);
414 +
415 +my $oldest_date = '2011-09-01T00:00:00.000Z';
416 +my $newest_date = '2012-01-01T00:00:00.000Z';
417 +
418 +my (@styles) = (
419 + "\e[0m", "\e[1m", "\e[3m", "\e[4m", "\e[7m",
420 + ( ( "\e[1m\e[3m", "\e[1m\e[4m", "\e[1m\e[7m", ), ( "\e[3m\e[4m", "\e[3m\e[7m", ), "\e[4m\e[7m", ),
421 + ( ( "\e[1m\e[3m\e[4m", "\e[1m\e[3m\e7m" ), ( "\e[3m\e[4m\e[7m", ), ),
422 + ( "\e[1m\e[3m\e[4m\e[7m", ),
423 +);
424 +
425 +my (@fgs) = ( "\e[30m", "\e[31m", "\e[32m", "\e[33m", "\e[34m", "\e[35m", "\e[36m", "\e[37m" );
426 +my (@bgs) = ( "\e[49m", "\e[41m", "\e[42m", "\e[43m", "\e[44m", "\e[45m", "\e[46m", "\e[47m", "\e[40m", );
427 +
428 +my @bad = (
429 + [ undef, "\e[30m", "\e[40m" ],
430 + [ undef, "\e[30m", "\e[49m" ],
431 + [ undef, "\e[31m", "\e[41m" ],
432 + [ undef, "\e[32m", "\e[42m" ],
433 + [ undef, "\e[33m", "\e[43m" ],
434 + [ undef, "\e[34m", "\e[44m" ],
435 + [ undef, "\e[35m", "\e[45m" ],
436 + [ undef, "\e[36m", "\e[46m" ],
437 + [ undef, "\e[47m", "\e[47m" ],
438 +);
439 +
440 +sub is_bad {
441 + my ( $style, $fg, $bg ) = @_;
442 + for my $bc (@bad) {
443 + my ( $sm, $fgm, $bgm );
444 + $sm = ( not defined $bc->[0] or $bc->[0] eq $style );
445 + $fgm = ( not defined $bc->[1] or $bc->[1] eq $fg );
446 + $bgm = ( not defined $bc->[2] or $bc->[2] eq $bg );
447 + return 1 if ( $sm and $fgm and $bgm );
448 + }
449 + return;
450 +}
451 +
452 +my (@colours);
453 +
454 +for my $bg (@bgs) {
455 + for my $style (@styles) {
456 +
457 + for my $fg (@fgs) {
458 + next if is_bad( $style, $fg, $bg );
459 + push @colours, $style . $fg . $bg;
460 +
461 + }
462 + }
463 +}
464 +
465 +my (@author_color_map) = @colours;
466 +my (@dist_color_map) = @colours;
467 +
468 +sub next_c {
469 + my $i = $_[0];
470 + my $colour = shift @{$i};
471 + push @{$i}, $colour;
472 + return $colour;
473 +
474 +}
475 +sub next_colour {
476 + return next_c \@colours;
477 +}
478 +
479 +my %dist_colours;
480 +my %author_colours;
481 +
482 +sub author_colour {
483 + return $author_colours{ $_[0] } if exists $author_colours{ $_[0] };
484 + return ( $author_colours{ $_[0] } = next_c \@author_color_map );
485 +}
486 +
487 +sub dist_colour {
488 + return $dist_colours{ $_[0] } if exists $dist_colours{ $_[0] };
489 + return ( $dist_colours{ $_[0] } = next_c \@dist_color_map );
490 +}
491 +
492 +sub ac {
493 + return author_colour( $_[0] ) . $_[0] . "\e[0m";
494 +}
495 +
496 +sub dc {
497 + return dist_colour( $_[0] ) . $_[1] . "\e[0m";
498 +}
499 +
500 +my $results = $mcpan->post(
501 + 'release',
502 + {
503 + query => {
504 + terms => {
505 + distribution => [ @want_dists, ],
506 + minimum_match => 1,
507 + }
508 + },
509 + filter => {
510 + range => {
511 + date => {
512 + from => $oldest_date,
513 + to => $newest_date,
514 + },
515 + },
516 + },
517 + sort => [
518 + # { 'author' => 'asc', },
519 + { 'date' => 'desc' , }
520 + ],
521 + fields => [qw( author name date distribution )],
522 + size => 1024,
523 + }
524 +);
525 +use Try::Tiny;
526 +use Data::Dump qw( pp );
527 +for my $result ( @{ $results->{hits}->{hits} } ) {
528 +
529 + my %f = %{ $result->{fields} };
530 + my ( $date, $distribution, $name, $author ) = @f{qw( date distribution name author)};
531 +
532 + my $file;
533 + try {
534 + $file = $mcpan->source(
535 + author => $author,
536 + release => $name,
537 + path => 'Changes',
538 + );
539 + };
540 + my ( $changes, @releases);
541 + if ( $file ) {
542 + $changes = CPAN::Changes->load_string( $file );
543 + }
544 + if ( $changes ){
545 + @releases = $changes->releases();
546 + }
547 +
548 + say sprintf "%s - %s/%s\e[0m", $date, ac($author), dc($distribution,$name);
549 + if ( @releases ) {
550 + say $releases[-1]->serialize;
551 + }
552 +}
553
554 diff --git a/scripts/show_deptree.pl b/scripts/show_deptree.pl
555 index ef6d8e7..0c6893c 100755
556 --- a/scripts/show_deptree.pl
557 +++ b/scripts/show_deptree.pl
558 @@ -63,17 +63,19 @@ my @squeue =
559 sort { $a->[1]->[2] cmp $b->[1]->[2] or $a->[1]->[3] cmp $b->[1]->[3] or $a->[0] cmp $b->[0] } @queue;
560
561 require dep::handler::stdout;
562 +require dep::handler::bashcode;
563 +
564 my $handler = dep::handler::stdout->new();
565 +my $handler2 = dep::handler::bashcode->new();
566 +
567
568 for my $qi (@squeue) {
569 - deptools::dispatch_dependency_handler( $release, @{$qi}, $handler );
570 + deptools::dispatch_dependency_handler( $release, @{$qi}, $handler2 );
571 }
572
573 #say pp( \%modules,);# { pretty => 1 } );
574 exit 1;
575
576 -
577 -
578 sub pkg_for_module {
579 my ($module) = shift;
580
581 @@ -85,4 +87,3 @@ sub gen_dep {
582
583 }
584
585 -