App-PDRUtils
view release on metacpan or search on metacpan
lib/App/PDRUtils/MultiCmd.pm view on Meta::CPAN
my $mods = $pargs->{doesnt_depend};
last unless $mods && @$mods;
for my $mod (@$mods) {
if (App::PDRUtils::Cmd::_has_prereq($parsed_dist_ini, $mod)) {
log_trace("Skipping repo %s (depends on $mod)", $repo);
$excluded++;
last FILTER;
}
}
}
HAS_TAGS:
{
last unless $pargs->{has_tags} && @{ $pargs->{has_tags} };
for my $t (@{ $pargs->{has_tags} }) {
if (-f ".tag-$t") {
last HAS_TAGS;
}
}
log_trace("Skipping repo (doesn't have any tag in has_tags)");
$excluded++;
last FILTER;
}
LACKS_TAGS:
{
last unless $pargs->{lacks_tags} && @{ $pargs->{lacks_tags} };
for my $t (@{ $pargs->{lacks_tags} }) {
if (-f ".tag-$t") {
log_trace("Skipping repo (has tag '$t' in lacks_tags)");
$excluded++;
last FILTER;
}
}
}
}
next REPO if $excluded;
my $res = $callback->(
parent_args => $pargs,
repo => $repo,
(dist => $dist_name) x !!defined($dist_name),
(dist_ini => $dist_ini) x !!defined($dist_ini),
(parsed_dist_ini => $parsed_dist_ini) x !!defined($parsed_dist_ini),
);
log_trace("Result for repo '%s': %s", $repo, $res);
if ($res->[0] != 200 && $res->[0] != 304) {
log_warn("Processing repo %s failed: %s", $repo, $res);
}
$envres->add_result(@$res, {item_id=>$repo});
}
$envres->as_struct;
}
sub create_cmd_from_dist_ini_cmd {
no strict 'refs';
my %cargs = @_;
my $name = $cargs{dist_ini_cmd};
my $source_pkg = "App::PDRUtils::DistIniCmd::$name";
my $target_pkg = caller();#"App::PDRUtils::MultiCmd::$name";
eval "use $source_pkg"; die if $@;
my $source_specs = \%{"$source_pkg\::SPEC"};
my $spec = clone($source_specs->{handle_cmd});
for (keys %App::PDRUtils::DistIniCmd::common_args) {
delete $spec->{args}{$_};
}
for (keys %common_args) {
$spec->{args}{$_} = $common_args{$_};
}
$spec->{features}{dry_run} = 1;
${"$target_pkg\::SPEC"}{handle_cmd} = $spec;
*{"$target_pkg\::handle_cmd"} = sub {
my %fargs = @_;
_for_each_repo(
{requires_parsed_dist_ini => 1},
\%fargs,
sub {
my %cbargs = @_;
my $repo = $cbargs{repo};
my $dist = $cbargs{dist};
my $pargs = $cbargs{parent_args};
my %diargs;
$diargs{parsed_dist_ini} = $cbargs{parsed_dist_ini};
for (keys %{$spec->{args}}) {
$diargs{$_} = $pargs->{$_} if exists $pargs->{$_};
}
my $handle_cmd = \&{"$source_pkg\::handle_cmd"};
my $res = $handle_cmd->(%diargs);
if ($res->[0] == 200) {
log_info("%s[dist %s] %s",
$fargs{-dry_run} ? "[DRY-RUN] " : "",
$dist,
$res->[1]);
if ($fargs{-dry_run}) {
$res->[0] = 304;
} else {
File::Slurper::write_text(
"dist.ini", $res->[2]->as_string);
}
undef $res->[2];
} else {
log_trace("%d - %s", $res->[0], $res->[1]);
}
$res;
}, # callback
); # for each repo
};
}
1;
# ABSTRACT: Common stuffs for App::PDRUtils::MultiCmd::*
( run in 1.724 second using v1.01-cache-2.11-cpan-5837b0d9d2c )