App-SCM-Digest
view release on metacpan or search on metacpan
lib/App/SCM/Digest.pm view on Meta::CPAN
package App::SCM::Digest;
use strict;
use warnings;
use App::SCM::Digest::Utils qw(system_ad slurp);
use App::SCM::Digest::SCM::Factory;
use autodie;
use DateTime;
use DateTime::Format::Strptime;
use Getopt::Long;
use Email::MIME;
use File::Copy;
use File::Path;
use File::ReadBackwards;
use File::Temp qw(tempdir);
use List::Util qw(first);
use POSIX qw();
use constant PATTERN => '%FT%T';
use constant EMAIL_ATTRIBUTES => (
content_type => 'text/plain',
disposition => 'attachment',
charset => 'UTF-8',
encoding => 'quoted-printable',
);
our $VERSION = '0.14';
sub new
{
my ($class, $config) = @_;
my $self = { config => $config };
bless $self, $class;
return $self;
}
sub _strftime
{
my ($time) = @_;
return POSIX::strftime(PATTERN, gmtime($time));
}
sub _impl
{
my ($name) = @_;
return App::SCM::Digest::SCM::Factory->new($name);
}
sub _load_repository
{
my ($repository) = @_;
my ($name, $url, $type) = @{$repository}{qw(name url type)};
my $impl = _impl($type);
return ($name, $impl);
}
sub _load_and_open_repository
{
my ($repository) = @_;
my ($name, $impl) = _load_repository($repository);
eval { $impl->open_repository($name) };
if (my $error = $@) {
die "Unable to open repository '$name': $error";
}
return ($name, $impl);
}
sub _init_repository
{
my ($repo_path, $db_path, $repository) = @_;
chdir $repo_path;
my ($name, $impl) = _load_repository($repository);
my $pre_existing = (-e $name);
if (not $pre_existing) {
if (not -e "$db_path/$name") {
mkdir "$db_path/$name";
( run in 2.246 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )