]> www.fi.muni.cz Git - aoc.git/blob - 2022/run
Day 25: examining the input
[aoc.git] / 2022 / run
1 #!/usr/bin/perl
2
3 use v5.36;
4 use warnings;
5 use strict;
6
7 use Time::HiRes qw(sleep);
8 use Linux::Inotify2;
9 use POSIX qw(strftime WIFSIGNALED WTERMSIG SIGINT);
10 use Mojo::File;
11
12 use Y::AoC qw(grey red);
13
14 my $cmd = shift;
15 my $backup = "backup/$cmd";
16 $cmd = "./$cmd" if $cmd !~ /\//;
17
18 my $last_backup;
19 my $file = Mojo::File->new($cmd);
20 my $mtime;
21 while (1) {
22         my $b = "$backup-".strftime("%H-%M-%S", localtime(time));
23         $file->copy_to($b);
24         $mtime = $file->stat->mtime;
25         say grey("\nrunning $cmd @ARGV... ============================");
26         system $cmd, @ARGV;
27         if ($? && WIFSIGNALED($?) && WTERMSIG($?) == SIGINT) {
28                 say red(" Got SIGINT");
29                 if ($file->stat->mtime > $mtime) {
30                         next;
31                 }
32         } elsif ($?) {
33                 say grey("FAILED: $?");
34         } else {
35                 say grey("finished OK");
36         }
37
38         my $inotify = Linux::Inotify2->new;
39         $inotify->watch($cmd, IN_MODIFY);
40         say grey("\nWaiting for modification of $cmd ...");
41         $inotify->read;
42         sleep 0.1;
43 }