App-SCM-Digest
view release on metacpan or search on metacpan
lib/App/SCM/Digest.pm view on Meta::CPAN
my ($repo_path, $db_path, $repositories) =
@{$config}{qw(repository_path db_path repositories)};
for my $repository (@{$repositories}) {
eval {
$method->($repo_path, $db_path, $repository);
};
if (my $error = $@) {
chdir $repo_path;
my ($name, $impl) = _load_repository($repository);
my $backup_dir = tempdir(CLEANUP => 1);
my $backup_path = $backup_dir.'/temporary';
my $do_backup = (-e $name);
if ($do_backup) {
my $res = move($name, $backup_path);
if (not $res) {
warn "Unable to backup repository for re-clone: $!";
}
}
eval {
$impl->clone($repository->{'url'}, $name);
$method->($repo_path, $db_path, $repository);
};
if (my $sub_error = $@) {
if ($do_backup) {
my $rm_error;
rmtree($name, { error => \$rm_error });
if ($rm_error and @{$rm_error}) {
my $info =
join ', ',
map { join ':', %{$_} }
@{$rm_error};
warn "Unable to restore repository: ".$info;
} else {
my $res = move($backup_path, $name);
if (not $res) {
warn "Unable to restore repository on ".
"failed rerun: $!";
}
}
}
my $error_msg = "Re-clone or nested operation failed: ".
"$sub_error (original error was $error)";
if ($config->{'ignore_errors'}) {
warn $error_msg;
( run in 2.982 seconds using v1.01-cache-2.11-cpan-49f99fa48dc )