diff options
author | Kent Fredric <kentfredric@gmail.com> | 2011-10-30 18:10:12 +1300 |
---|---|---|
committer | Kent Fredric <kentfredric@gmail.com> | 2011-10-31 15:45:47 +1300 |
commit | 51e1a94445b07c58d4fb2f5167a37a5991844b55 (patch) | |
tree | 1a9aecf469a9bdf456e760f16144d1185edef111 /scripts/gen_ebuild.pl | |
parent | enable dev/backpan in output again (diff) | |
download | perl-overlay-51e1a94445b07c58d4fb2f5167a37a5991844b55.tar.gz perl-overlay-51e1a94445b07c58d4fb2f5167a37a5991844b55.tar.bz2 perl-overlay-51e1a94445b07c58d4fb2f5167a37a5991844b55.zip |
rename gen_build and make it just a deptree displayer
Diffstat (limited to 'scripts/gen_ebuild.pl')
-rwxr-xr-x | scripts/gen_ebuild.pl | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/scripts/gen_ebuild.pl b/scripts/gen_ebuild.pl deleted file mode 100755 index 9828a1278..000000000 --- a/scripts/gen_ebuild.pl +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env perl - -eval 'echo "Called with something not perl"' && exit 1 # Non-Perl protection. - if 0; - -use 5.14.2; -use strict; -use warnings; -use FindBin; -use lib "$FindBin::Bin/lib"; -use env::gentoo::perl_experimental; -use metacpan qw( mcpan ); -use utf8; -use Gentoo::PerlMod::Version qw( gentooize_version ); -use Text::Wrap; - -my $flags; -my $singleflags; - -@ARGV = grep { defined } map { - $_ =~ /^--(\w+)/ - ? do { $flags->{$1}++; undef } - : do { - $_ =~ /^-(\w+)/ - ? do { $singleflags->{$1}++; undef } - : do { $_ } - } -} @ARGV; - -if ( $flags->{help} or $singleflags->{h} ) { print help(); exit 0; } - -# FILENAME: gen_ebuild.pl -# CREATED: 25/10/11 12:15:51 by Kent Fredric (kentnl) <kentfredric@gmail.com> -# ABSTRACT: An attempt at generating ebuilds entirely from MetaCPAN data - -# usage: -# -# gen_ebuild.pl DOY/Moose-2.0301-TRIAL -# emits Moose/Moose-2.30.100_rc.ebuild -my ($release) = shift(@ARGV); - -*STDOUT->binmode(':utf8'); -*STDERR->binmode(':utf8'); - -my %phases; -my %modules; -my %providers; - -my $dep_phases = get_dep_phases( $release ); -%phases = %{ $dep_phases->{phases} }; -%modules = %{ $dep_phases->{modules} }; - -use Data::Dump qw( pp ); -use JSON qw( to_json encode_json ); -use Try::Tiny; -use version (); - -sub provider_map { - my ( $module , $version ) = @_; - my @providers = metacpan->find_dist_simple( $module ); - my %moduleprov; - - - my %specialvs; - - my $wanted_version = version->parse( $version ); - - for my $provider ( @providers ) { - - next if $provider->{status} eq 'backpan'; - next if $provider->{maturity} eq 'developer'; -# pp $provider; - - my $dist = $provider->{distribution}; - my $distv = $provider->{version} // 'undef'; - my $gv = 'undef'; - if ( $distv ne 'undef' ){ - try { - $gv = gentooize_version( $distv , { lax => 1 } ); - } catch { - $gv = '???'; - }; - } - - #next if $gv eq '???'; - - $moduleprov{$dist} //= []; - - my @provided_matching_mods; - for my $mod ( @{ $provider->{'_source.module' } } ) { - next unless $mod->{name} eq $module; - my $modv = $mod->{version} // 'undef'; - - my $got_version = version->parse( $mod->{version} ); - - my $dv = $distv; - #if( $distv ne $modv ) { - $dv = sprintf "%s ( %s ) => \"%s\"" , $distv , $gv, $modv; - #} - # specials - - $specialvs{newest} //= {}; - $specialvs{oldest} //= {}; - $specialvs{closest} //= {}; - $specialvs{closestx} //= {}; - - $specialvs{newest}->{$dist} = $dv if not exists $specialvs{newest}->{$dist}; - $specialvs{oldest}->{$dist} = $dv; - - # *STDERR->printf("\e[99m%s > %s , %s\n", $got_version, $wanted_version, $got_version > $wanted_version ); - - if ( not defined $version or $got_version >= $wanted_version ){ -# *STDERR->printf("\e[99m%s > %s , %s x2\n", $got_version, $version , 1 ); - if ( not defined $specialvs{closestx}->{$dist} ) { -# *STDERR->printf("\e[99m%s > %s => set \n", $got_version, $version ); - $specialvs{closestx}->{$dist} = $got_version; - $specialvs{closest}->{$dist} = $dv; - } else { - if( $specialvs{closestx}->{$dist} >= $got_version ) { -# *STDERR->printf("\e[99m%s > %s => << \n", $got_version, $version ); - - $specialvs{closestx}->{$dist} = $got_version; - $specialvs{closest}->{$dist} = $dv; - - } - } - } - # - - push @provided_matching_mods, $dv - if $mod->{name} eq $module; - } - push @{ $moduleprov{$dist} }, @provided_matching_mods; - } - return \%moduleprov, \%specialvs; -} -for my $module ( keys %modules ) { - for my $declaration ( @{ $modules{$module} } ) { - - my $depstring = $module; - if ( $declaration->[1] ne '0.0.0' ) { - $depstring .= " " . $declaration->[0] . " ( " . $declaration->[1] . " ) " ; - } - - my $want_string = "$release -> " . $declaration->[2] . " " . $declaration->[3] . " " . $depstring; - - - my ( $moduleprov, $specialvs ) = provider_map( $module , $declaration->[0]); - - my $pc = scalar keys %$moduleprov; - - my $multi = ( $pc > 1 ); - my $any = ( $pc > 0 ); - - *STDERR->printf("\e[1;93m%s\e[0m\n", $want_string ); - - - - if ( not $any ) { - *STDERR->printf("%sWARNING: NO PROVIDER FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" ); - next; - } - if( $multi ){ - *STDERR->printf("%sWARNING: MULTIPLE PROVIDERS FOUND FOR \"%s\"%s\n", "\e[1;91m", $module, "\e[0m" ); - } - - my $indent = " \e[1;92m*"; - $indent = " \e[1;91m*" if $multi; - - for my $prov ( keys %{$moduleprov} ) { - my $prefix = $depstring . ' in ' . $prov; - my $lines = xwrap( join q[, ], @{$moduleprov->{ $prov } } ); - my ( @slines ) = split /$/m , $lines; - $_ =~ s/[\r\n]*//m for @slines; - *STDERR->printf(" %s%s -> %s%s\n", "\e[1;92m", $depstring, "\e[0m\e[92m" ,$prov); - *STDERR->printf("%s newest: %s\e[0m\n", $indent, $specialvs->{newest}->{$prov}); - *STDERR->printf("%s oldest: %s\e[0m\n", $indent, $specialvs->{oldest}->{$prov}); - my $v = $specialvs->{closest}->{$prov}; - if( not defined $v ){ $v = 'undef' } - *STDERR->printf("%s closest: %s\e[0m\n", $indent, $v ); - for ( @slines ) { - - *STDERR->printf("%s %s%s -> %s%s\n", $indent, "\e[1;94m", $prov , "\e[0m\e[94m", $_ ); - } - } - if ( $multi ){ - *STDERR->print(" \e[1;91m-\n\n"); - } else { - *STDERR->print(" \e[1;92m-\n\n"); - } - -# my ( $prov ) = ( keys %moduleprov ); -# my $prefix = $want_string.q{/}.$prov; - # -# *STDERR->printf("%s -> %s [ \n%s\n] \n", $want_string, $prov, clines("\e[39m", "\e[96m$prefix\e[0m", xwrap( join q[, ], @{$moduleprov{$prov}} ) )); -# } else { -# *STDERR->printf("\n%s -> \e[31mMULTIPLE CHOICE: [\e[0m\n", $module); -# for my $prov ( keys %moduleprov ) { -# my $prefix = "\e[94m$want_string/$prov\e[0m"; -# *STDERR->printf(" %s -> \e[31m%s \e[0m[\n%s\n]\n", $want_string, $prov, clines("\e[32m",$prefix, xwrap(join q[, ], @{$moduleprov{$prov}})) ); -# } -# *STDERR->print("\e[31m]\e[0m\n"); - -# } -# *STDERR->printf("%s -> %s\n", $module, $providers{$module}->[0]->{as_string} ); - #push @{ $modules{$module}->[0] }, $providers{$module}->[0]->{as_string}; -}} - -use Data::Dump qw( pp ); -use JSON qw( to_json encode_json ); -#say pp( \%modules,);# { pretty => 1 } ); -exit 1; - -sub xwrap { - local $Text::Wrap::break = qr/,/; - local $Text::Wrap::overflow = 'huge'; - local $Text::Wrap::columns = 128; - $Text::Wrap::overflow = 'huge'; - my $pre = " "; - my $lines = wrap( $pre , $pre, @_ ); - return $lines; -} -sub clines { - my ( $c, $prefix , $lines ) = @_ ; - $lines =~ s/^/$prefix>>$c/mg; - $lines =~ s/$/\e[0m/mg; - return $lines; -} - -sub get_dep_phases { - my ( $release ) = shift; - my %phases; - my %modules; - my ( $result, ) = get_deps($release); - for my $dep ( @{ $result->{dependency} } ) { - my $phase = $dep->{phase}; - my $module = $dep->{module}; - my $required = ( $dep->{relationship} eq 'requires' ); - - next unless $required; - next if $phase eq 'develop'; - - $phases{$phase} //= []; - $modules{$module} //= []; - - my $v = gentooize_version( $dep->{version}, { lax => 1 } ); - - push @{ $phases{$phase} }, [ $dep->{module} , $dep->{version} , $v, $dep->{relationship} ]; - push @{ $modules{$module} }, [ $dep->{version}, $v, $dep->{phase} , $dep->{relationship} ]; - } - return { phases => \%phases, modules => \%modules }; -} - -sub to_curl { - my ( $target, $query ) = @_; - - my $query_json = to_json( $query, { pretty => 1 } ); - print 'curl -XPOST api.metacpan.org/v0/' . $target . '/_search -d \''; - print $query_json; - print qq{'\n}; - -} - -sub get_deps { - my ($release) = shift; - - my ( $author, $distrelease ); - - $release =~ qr{^([^/]+)/(.*$)}; - ( $author, $distrelease ) = ( "$1", "$2" ); - return metacpan->find_release( $author, $distrelease ); -} - -sub pkg_for_module { - my ($module) = shift; - -} - -sub gen_dep { - state $template = qq{\t# %s%s\n\techo %s\n}; - my ( $module, $version ) = @_; - -} - -sub help { - return <<'EOF'; -gen_ebuild.pl - -USAGE: - - gen_ebuild.pl DOY/Moose-2.0301-TRIAL - - edit ./Moose-2.30.100_rc.ebuild - - done! - -EOF -} |