Start gruntmaster-exec alarm just before exec
[gruntmaster-daemon.git] / lib / Gruntmaster / Daemon / Format.pm
index 6160a31e9460a08bba84bafb9f44eab524ffc89d..0a7361152e2bba476e6cdac675740fad05bd58f3 100644 (file)
@@ -6,8 +6,10 @@ use warnings;
 use parent qw/Exporter/;
 no if $] > 5.017011, warnings => 'experimental::smartmatch';
 
+use Digest::SHA qw/sha256_hex/;
 use Expect::Simple;
 use File::Basename qw/fileparse/;
+use File::Copy qw/cp/;
 use File::Slurp qw/read_file write_file/;
 use List::MoreUtils qw/natatime/;
 use Log::Log4perl qw/get_logger/;
@@ -30,7 +32,7 @@ sub runvm {
        $vm{$name} = Expect::Simple->new({
                Cmd => $cmd,
                Prompt => '# ',
-               DisconnectCmd => 'exit',
+               DisconnectCmd => '/sbin/poweroff -fn',
                RawPty => 1,
                Timeout => 10,
        });
@@ -61,7 +63,7 @@ sub execlist {
        unlink $er;
        chomp ($excode, $exmsg); ## no critic (ProhibitParensWithBuiltins)
        get_logger->trace("Exec result: $excode $exmsg");
-       die [$excode, $exmsg] if $excode > 0; ## no critic (RequireCarping)
+       die [$excode, $exmsg] if $excode; ## no critic (RequireCarping)
 }
 
 sub mkrun{
@@ -115,7 +117,19 @@ sub prepare_files{
 
                $file->{run} = mkrun($format);
                write_file $name, $content;
-               prepare $name, $format;
+               if ($ENV{GRUNTMASTER_CCACHE}) {
+                       my $key = lc sha256_hex($content) . '-' . $format;
+                       my $cachefn = "$ENV{GRUNTMASTER_CCACHE}/$key";
+                       my $exefn = fileparse $name, qr/[.][^.]*/s;
+                       if (cp $cachefn, $exefn) {
+                               get_logger->trace("File $name found in compilation cache")
+                       } else {
+                               prepare $name, $format;
+                               cp $exefn, $cachefn
+                       }
+               } else {
+                       prepare $name, $format
+               }
        }
 }
 
This page took 0.010945 seconds and 4 git commands to generate.