# # This file is part of Module-Packaged-Generator # # This software is copyright (c) 2010 by Jerome Quelin. # # This is free software; you can redistribute it and/or modify it under # the same terms as the Perl 5 programming language system itself. # use 5.010; use strict; use warnings; package Module::Packaged::Generator::Driver::URPMI; BEGIN { $Module::Packaged::Generator::Driver::URPMI::VERSION = '1.111930'; } # ABSTRACT: urpmi-based driver to fetch available modules use Moose; use MooseX::Has::Sugar; use Module::Packaged::Generator::Module; extends 'Module::Packaged::Generator::Driver'; with 'Module::Packaged::Generator::Role::Logging'; with 'Module::Packaged::Generator::Role::UrlFetching'; # -- private attributes has _medias => ( ro, lazy_build, isa => 'HashRef[Str]', traits => ['Hash'], handles => { medias => 'keys', get_media_url => 'get', }, ); # -- public methods sub list { my $self = shift; my @synthesises = $self->_get_synthesis; $self->log_step( "fetching list of available perl modules" ); require URPM; my $urpm = URPM->new; $self->log( "parsing synthesis files" ); $urpm->parse_synthesis($_) for @synthesises; $self->log( "extracting perl modules information" ); my @modules; my %seen; $urpm->traverse( sub { my $pkg = shift; my @provides = $pkg->provides; my $pkgname = $pkg->name; foreach my $p ( @provides ) { next unless $p =~ /^perl\(([^)]+)\)(\[== (.*)\])?$/; my ($name, $version) = ($1, $3); next if $seen{ $name }++; push @modules, Module::Packaged::Generator::Module->new( { name => $name, version => $version, pkgname => $pkgname, } ); } } ); return @modules; } # -- private methods # # my @files = $urpmi->_get_synthesis; # # download the synthesis files from a mirror and store them locally, # return the path to the local files. this allows to use latest & # greatest data instead of (stalled?) local data. # sub _get_synthesis { my $self = shift; $self->log_step( "downloading synthesis information" ); my @files; (my $driver = ref($self)) =~ s/.*:://; foreach my $media ( $self->medias ) { my $url = $self->get_media_url($media); my $base = "synthesis.hdlist.$driver.$media.cz"; push @files, $self->fetch_url( $url, $base ); } return @files; } 1; =pod =head1 NAME Module::Packaged::Generator::Driver::URPMI - urpmi-based driver to fetch available modules =head1 VERSION version 1.111930 =head1 DESCRIPTION This module is the L driver for urpmi-based distributions (such as Mageia and Mandriva). =head1 AUTHOR Jerome Quelin =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2010 by Jerome Quelin. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut __END__