]> www.fi.muni.cz Git - aoc.git/commitdiff
runner
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 8 Dec 2024 19:09:00 +0000 (20:09 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 8 Dec 2024 19:09:00 +0000 (20:09 +0100)
run [new file with mode: 0755]

diff --git a/run b/run
new file mode 100755 (executable)
index 0000000..19f31ba
--- /dev/null
+++ b/run
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+
+use v5.36;
+use warnings;
+use strict;
+
+use FindBin qw($Bin);
+use lib "$Bin/lib";
+use Time::HiRes qw(sleep);
+use Linux::Inotify2;
+use POSIX qw(strftime WIFSIGNALED WTERMSIG SIGINT);
+use Mojo::File;
+
+use Y::AoC qw(grey red);
+
+my $cmd = shift;
+die "Usage: $0 ./command.pl" if !defined $cmd || !-x $cmd;
+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));
+       $file->copy_to($b);
+       $mtime = $file->stat->mtime;
+       say grey("\nrunning $cmd @ARGV... ============================");
+       system $cmd, @ARGV;
+       if ($? && WIFSIGNALED($?) && WTERMSIG($?) == SIGINT) {
+               say red(" Got SIGINT");
+               if ($file->stat->mtime > $mtime) {
+                       next;
+               }
+       } elsif ($?) {
+               say grey("FAILED: $?");
+       } else {
+               my $line;
+               $line .= (qw(. ' ~ - = _))[rand(5)] for 1 .. 30;
+               say grey("finished OK $line");
+       }
+
+       my $inotify = Linux::Inotify2->new;
+       $inotify->watch($cmd, IN_MODIFY);
+       say grey("\nWaiting for modification of $cmd ...");
+       $inotify->read;
+       sleep 0.1;
+}