]> www.fi.muni.cz Git - aoc.git/commitdiff
run: sigint handling, native backups
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 19 Dec 2022 14:26:40 +0000 (15:26 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 19 Dec 2022 14:26:40 +0000 (15:26 +0100)
2022/run

index 40a45a618ed3419fafcf4d7b7bcd9e5475c67855..9dc85ce344495c45b782cf2f731095134f9dbe14 100755 (executable)
--- 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");