App-Nrepo
view release on metacpan or search on metacpan
lib/App/Nrepo/Plugin/Base.pm view on Meta::CPAN
}
return 0;
}
sub validate_arch {
my $self = shift;
my $arch = shift;
my $matched;
for my $a ( @{ $self->arches() } ) {
$matched++ if $a eq $arch;
}
return $matched;
}
sub validate_file {
my $self = shift;
my %o = validate(
@_,
{
filename => { type => SCALAR },
check => { type => SCALAR },
value => { type => SCALAR },
}
);
# If theres no file, its not valid
return 0 unless -f $o{'filename'};
# If force is enabled, its not valid
return 0 if $self->force();
# Check against size
if ( $o{'check'} eq 'size' ) {
return $self->_validate_file_size( $o{'filename'}, $o{'value'} );
}
# Check against sha
elsif ( $o{'check'} eq 'sha' ) {
return $self->_validate_file_sha( $o{'filename'}, $o{'value'} );
}
# Check against sha256
elsif ( $o{'check'} eq 'sha256' ) {
return $self->_validate_file_sha256( $o{'filename'}, $o{'value'} );
}
else {
$self->logger->log_and_croak(
level => 'error',
message => "unknown validation check type: $o{'check'}"
);
}
}
sub _validate_file_size {
my $self = shift;
my $file = shift;
my $size = shift;
my @stats = stat($file);
my $file_size = $stats[7];
return $file_size eq $size ? 1 : undef;
}
sub _validate_file_sha {
my $self = shift;
my $file = shift;
my $checksum = shift;
my $sha = Digest::SHA->new('sha1');
$sha->addfile($file);
return $sha->hexdigest eq $checksum ? 1 : undef;
}
sub _validate_file_sha256 {
my $self = shift;
my $file = shift;
my $checksum = shift;
my $sha = Digest::SHA->new('sha256');
$sha->addfile($file);
return $sha->hexdigest eq $checksum ? 1 : undef;
}
sub mirror {
my $self = shift;
for my $arch ( @{ $self->arches() } ) {
$self->logger->info(
sprintf(
"mirror: starting repo: %s arch: %s from url: %s to dir: %s",
$self->repo, $arch, $self->url, $self->dir
)
);
my $packages = $self->get_metadata($arch);
$self->get_packages( arch => $arch, packages => $packages );
}
}
sub clean {
my $self = shift;
$self->logger->info(
sprintf( "clean: starting repo: %s in dir: %s", $self->repo, $self->dir ) );
for my $arch ( @{ $self->arches() } ) {
my $files = $self->read_metadata($arch);
$self->clean_files( arch => $arch, files => $files );
}
}
sub init {
my $self = shift;
my $arch = shift;
$self->logger->info( sprintf 'init: repo: %s dir: %s',
$self->repo(), $self->dir() );
if ($arch) {
$self->init_arch($arch);
( run in 0.582 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )