X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=2022%2Frun;h=9dc85ce344495c45b782cf2f731095134f9dbe14;hb=f141c1ae1581135db4bc9f68aa677c7c499f4956;hp=40a45a618ed3419fafcf4d7b7bcd9e5475c67855;hpb=78136e93bf5e13aabceb8834ab3748187ee74eee;p=aoc.git diff --git a/2022/run b/2022/run index 40a45a6..9dc85ce 100755 --- a/2022/run +++ b/2022/run @@ -6,7 +6,7 @@ use strict; use Time::HiRes qw(sleep); use Linux::Inotify2; -use POSIX qw(strftime); +use POSIX qw(strftime WIFSIGNALED WTERMSIG SIGINT); use Mojo::File; use Y::AoC qw(grey red); @@ -16,12 +16,20 @@ my $backup = "backup/$cmd"; $cmd = "./$cmd" if $cmd !~ /\//; my $last_backup; +my $file = Mojo::File->new($cmd); +my $mtime; while (1) { my $b = "$backup-".strftime("%H-%M-%S", localtime(time)); - system 'cp', $cmd, $b; + $file->copy_to($b); + $mtime = $file->stat->mtime; say grey("\nrunning $cmd @ARGV... ============================"); system $cmd, @ARGV; - if ($?) { + if ($? && WIFSIGNALED($?) && WTERMSIG($?) == SIGINT) { + say red(" Got SIGINT"); + if ($file->stat->mtime > $mtime) { + next; + } + } elsif ($?) { say grey("FAILED: $?"); } else { say grey("finished OK");