From c4f0b14345a911da48bbeb38ce39fd4a0016f46d Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Sun, 8 Dec 2024 20:09:00 +0100 Subject: [PATCH] runner --- run | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 run diff --git a/run b/run new file mode 100755 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; +} -- 2.43.5