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 )