App-cpm
view release on metacpan or search on metacpan
lib/App/cpm/Master.pm view on Meta::CPAN
}
}
$self;
}
sub fail {
my $self = shift;
my @fail_resolve = sort keys %{$self->{_fail_resolve}};
my @fail_install = sort keys %{$self->{_fail_install}};
my @not_installed = grep { !$self->{_fail_install}{$_->distfile} && !$_->installed } $self->distributions;
return if !@fail_resolve && !@fail_install && !@not_installed;
my $detector = App::cpm::CircularDependency->new;
for my $dist (@not_installed) {
my $req = $dist->requirements([qw(configure build test runtime)])->as_array;
$detector->add($dist->distfile, $dist->provides, $req);
}
$detector->finalize;
my $detected = $detector->detect;
for my $distfile (sort keys %$detected) {
my $distvname = $self->distribution($distfile)->distvname;
my @circular = @{$detected->{$distfile}};
my $msg = join " -> ", map { $self->distribution($_)->distvname } @circular;
local $self->{logger}{context} = $distvname;
$self->{logger}->log("Detected circular dependencies $msg");
$self->{logger}->log("Failed to install distribution");
}
for my $dist (sort { $a->distvname cmp $b->distvname } grep { !$detected->{$_->distfile} } @not_installed) {
local $self->{logger}{context} = $dist->distvname;
$self->{logger}->log("Failed to install distribution, "
."because of installing some dependencies failed");
}
my @fail_install_name = map { CPAN::DistnameInfo->new($_)->distvname || $_ } @fail_install;
my @not_installed_name = map { $_->distvname } @not_installed;
if (@fail_resolve || @fail_install_name) {
$self->{logger}->log("--");
$self->{logger}->log(
"Installation failed. "
. "The direct cause of the failure comes from the following packages/distributions; "
. "you may want to grep this log file by them:"
);
$self->{logger}->log(" * $_") for @fail_resolve, sort @fail_install_name;
}
{ resolve => \@fail_resolve, install => [sort @fail_install_name, @not_installed_name] };
}
sub tasks { values %{shift->{tasks}} }
sub add_task {
my ($self, %task) = @_;
my $new = App::cpm::Task->new(%task);
if (grep { $_->equals($new) } $self->tasks) {
return 0;
} else {
( run in 0.528 second using v1.01-cache-2.11-cpan-cc502c75498 )