package CPANPLUS::Dist::Autobundle; use strict; use warnings; use CPANPLUS::Error qw[error msg]; use Params::Check qw[check]; use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; use base qw[CPANPLUS::Dist::Base]; =head1 NAME CPANPLUS::Dist::Autobundle - distribution class for installation snapshots =head1 SYNOPSIS $modobj = $cb->parse_module( module => 'file://path/to/Snapshot_XXYY.pm' ); $modobj->install; =head1 DESCRIPTION C is a distribution class for installing installation snapshots as created by C' C command. All modules as mentioned in the snapshot will be installed on your system. =cut sub init { my $dist = shift; my $status = $dist->status; $status->mk_accessors( qw[prepared created installed _prepare_args _create_args _install_args] ); return 1; } sub prepare { my $dist = shift; my %args = @_; ### store the arguments, so ->install can use them in recursive loops ### $dist->status->_prepare_args( \%args ); return $dist->status->prepared( 1 ); } sub create { my $dist = shift; my $self = $dist->parent; ### we're also the cpan_dist, since we don't need to have anything ### prepared $dist = $self->status->dist_cpan if $self->status->dist_cpan; $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; my %hash = @_; my( $force, $verbose, $prereq_target, $prereq_format, $prereq_build); my $args = do { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { force => { default => $conf->get_conf('force'), store => \$force }, verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, prereq_target => { default => '', store => \$prereq_target }, ### don't set the default prereq format to 'makemaker' -- wrong! prereq_format => { #default => $self->status->installer_type, default => '', store => \$prereq_format }, prereq_build => { default => 0, store => \$prereq_build }, }; check( $tmpl, \%hash ) or return; }; ### maybe we already ran a create on this object? ### return 1 if $dist->status->created && !$force; ### store the arguments, so ->install can use them in recursive loops ### $dist->status->_create_args( \%hash ); msg(loc("Resolving prerequisites mentioned in the bundle"), $verbose); ### this will set the directory back to the start ### dir, so we must chdir /again/ my $ok = $dist->_resolve_prereqs( format => $prereq_format, verbose => $verbose, prereqs => $self->status->prereqs, target => $prereq_target, force => $force, prereq_build => $prereq_build, ); ### if all went well, mark it & return return $dist->status->created( $ok ? 1 : 0); } sub install { my $dist = shift; my %args = @_; ### store the arguments, so ->install can use them in recursive loops ### $dist->status->_install_args( \%args ); return $dist->status->installed( 1 ); } 1;