use Gruntmaster::App '-command';
use Gruntmaster::Data;
+use Scalar::Util qw/looks_like_number/;
-sub usage_desc { '%c rerun id' }
+sub usage_desc { '%c rerun id...' }
sub validate_args {
my ($self, $opt, $args) = @_;
my @args = @$args;
- $self->usage_error('This command only works on jobs') if $self->app->table && $self->app->table ne 'jobs';
- $self->usage_error('Wrong number of arguments') if @args != 1;
+ $self->usage_error('Not enough arguments') if @args < 1;
}
sub execute {
my ($self, $opt, $args) = @_;
- my ($obj) = @$args;
- rerun_job $obj;
+ my @args = @$args;
+
+ for my $obj (@args) {
+ if (looks_like_number $obj) {
+ rerun_job $obj;
+ }
+ else {
+ rerun_problem $obj;
+ }
+ }
}
1;
=head1 NAME
-Gruntmaster::App::Command::Rerun - rerun a job
+Gruntmaster::App::Command::Rerun - rerun some jobs and probles
=head1 SYNOPSIS
- gm rerun 123
+ gm rerun 123 124
+
+ gm rerun aplusb aminusb
+
+ gm rerun 12 aplusb
=head1 DESCRIPTION
-The rerun command takes the ID of a job, clears its result, and makes
-B<gruntmaster-daemon> rerun it.
+The rerun command takes some IDs of jobs and problems and reruns them.
=head1 SEE ALSO
job_entry_sth => 'SELECT * FROM job_entry WHERE id = ?',
+ rerun_problem_sth => 'UPDATE jobs SET daemon=NULL,result=-2,result_text=NULL,results=NULL,errors=NULL WHERE problem = ?',
rerun_job_sth => 'UPDATE jobs SET daemon=NULL,result=-2,result_text=NULL,results=NULL,errors=NULL WHERE id = ?',
take_job_sth => 'UPDATE jobs SET daemon=? WHERE id = (SELECT id FROM jobs WHERE daemon IS NULL LIMIT 1 FOR UPDATE) RETURNING id',
);
$db->commit
}
+sub rerun_problem {
+ my ($problem) = @_;
+ _query rerun_problem_sth => $problem;
+ purge '/log/';
+}
+
sub rerun_job {
my ($id) = @_;
_query rerun_job_sth => $id;