use Gruntmaster::Daemon::Constants qw/ERR/;
use Gruntmaster::Daemon::Base qw/watch/;
+use Gruntmaster::Daemon::Format qw/mkrun/;
use Gruntmaster::Page qw/generate/;
use Fcntl qw/:flock/;
safe_can_nodie @_ or get_logger->logdie("No such \l$type: '$name'");
}
+sub prepare{
+ my $name = $_[0];
+ my $basename = fileparse $name, qr/\.[^.]*/;
+ get_logger->trace("Preparing file $name...");
+
+ open my $devnull, devnull;
+ open my $errors, '>>compile-error';
+ my $ret = open3 $devnull, $errors, undef, 'gruntmaster-compile', CPP => $basename, $name;
+ waitpid $ret, 0;
+ close $devnull;
+ close $errors;
+ die 'Compile error' if $?
+}
+
sub prepare_files{
my ($dir, $meta) = @_;
for my $file (values $meta->{files}) {
my ($format, $name) = @{$file}{qw/format name/};
- my $prepare = safe_can Format => prepare => $format;
- $file->{run} = safe_can Format => run => $format;
+ $file->{run} = mkrun($format);
die "No such file: '$name'" unless -e $name;
- $prepare->($name);
+ prepare $name;
}
}
chdir $dir;
mkdir "in";
for (<*>) {
- cp $_, "in" unless $_ eq 'in' || $_ eq 'pidfile';
+ cp $_, "in" unless $_ eq 'in';
}
my @results;
# Clean up
get_logger->info("Job result: " . $meta->{result_text});
- delete $meta->{files}{$_}{run} for keys $meta->{files};
- $meta->{date} = time;
$meta->{results} = \@full_results if scalar @full_results;
DumpFile "meta.yml", $meta;
for (<*>) {
unlink $_ unless $_ eq 'in' || $_ eq 'meta.yml' || ($_ eq 'compile-error' && -s);
}
chdir '../..';
- mkdir 'log' unless -d 'log';
- IO::File->new('>log/meta.yml')->close unless -f 'log/meta.yml';
- flock my $logmetafh = IO::File->new('<log/meta.yml'), LOCK_EX;
- my $logmeta = LoadFile 'log/meta.yml';
+ my $log = exists $meta->{contest} ? "ct/$meta->{contest}/log" : 'log';
+ mkdir $log unless -d $log;
+ IO::File->new(">$log/meta.yml")->close unless -f "$log/meta.yml";
+ flock my $logmetafh = IO::File->new("<$log/meta.yml"), LOCK_EX;
+ my $logmeta = LoadFile "$log/meta.yml";
$logmeta->{last}++;
- rename $dir, 'log/' . $logmeta->{last};
- generate 'log/' . $logmeta->{last} . '/index.html';
- DumpFile 'log/meta.yml', $logmeta;
+ rename $dir, "$log/$logmeta->{last}";
+ generate "$log/$logmeta->{last}/index.html";
+ DumpFile "$log/meta.yml", $logmeta;
undef $logmetafh;
- generate 'log/index.html'
+ generate "$log/index.html"
}
sub run{