App-JobLog
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/App/JobLog/Command/edit.pm view on Meta::CPAN
package App::JobLog::Command::edit;
$App::JobLog::Command::edit::VERSION = '1.042';
# ABSTRACT: edit the log
use App::JobLog -command;
use Modern::Perl;
use Class::Autouse qw{
App::JobLog::Log
App::JobLog::Log::Line
Digest::MD5
FileHandle
};
use autouse 'File::Temp' => qw(tempfile);
use autouse 'File::Copy' => qw(copy);
use autouse 'App::JobLog::Config' => qw(editor log);
use autouse 'Getopt::Long::Descriptive' => qw(prog_name);
use autouse 'App::JobLog::TimeGrammar' => qw(parse);
use autouse 'App::JobLog::Time' => qw(now);
sub execute {
my ( $self, $opt, $args ) = @_;
if ( $opt->close || $opt->validate ) {
eval {
my $log = App::JobLog::Log->new;
if ( $opt->close ) {
my $time = join ' ', @$args;
my ($s) = parse($time);
$self->usage_error(
'you may only insert closing times prior to present')
unless $s < now;
my ( $e, $i ) = $log->find_previous($s);
$self->usage_error('log does not contain appropriate event')
unless $e;
$self->usage_error('no open event at this time')
unless $e->is_open;
$log->insert( $i + 1,
App::JobLog::Log::Line->new( time => $s, done => 1 ) );
}
if ( $opt->validate ) {
my $errors = $log->validate;
_error_report($errors);
}
};
$self->usage_error($@) if $@;
}
elsif ( my $editor = editor ) {
if ( my $log = log ) {
my ( $fh, $fn ) = tempfile;
binmode $fh;
copy( $log, $fh );
$fh->close;
$fh = FileHandle->new($log);
my $md5 = Digest::MD5->new;
my $md51 = $md5->addfile($fh)->hexdigest;
system "$editor $log";
$fh = FileHandle->new($log);
my $md52 = $md5->reset->addfile($fh)->hexdigest;
if ( $md51 ne $md52 ) {
$fh = FileHandle->new( "$log.bak", 'w' );
copy( $fn, $fh );
$fh->close;
say "saved backup log in $log.bak";
my $errors = App::JobLog::Log->new->validate;
_error_report($errors);
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.647 second using v1.00-cache-2.02-grep-82fe00e-cpan-d29e8ade9f55 )