Jobset.pm: Factor out build->eval mapping.
We now have a searchBuildsAndEvalsForJobset, which creates such a mapping for us, so we don't need to duplicate code in jobs_tab and channels_tab. Also, we're going to use this for the overview of a particular channel as well, so it makes sense to put it in CatalystUtils instead of directly in Jobset.pm. Instead of eval->jobs, it's now eval->builds, because it's really an aggregate over the builds schema, rather than the job schema. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
@ -10,6 +10,7 @@ use Hydra::Helper::Nix;
|
||||
our @ISA = qw(Exporter);
|
||||
our @EXPORT = qw(
|
||||
getBuild getPreviousBuild getNextBuild getPreviousSuccessfulBuild
|
||||
searchBuildsAndEvalsForJobset
|
||||
error notFound gone accessDenied
|
||||
forceLogin requireUser requireProjectOwner requireAdmin requirePost isAdmin isProjectOwner
|
||||
trim
|
||||
@ -85,6 +86,44 @@ sub getPreviousSuccessfulBuild {
|
||||
}
|
||||
|
||||
|
||||
sub searchBuildsAndEvalsForJobset {
|
||||
my ($jobset, $condition, $maxBuilds) = @_;
|
||||
|
||||
my @evals = $jobset->jobsetevals->search(
|
||||
{ hasnewbuilds => 1},
|
||||
{ order_by => "id desc",
|
||||
rows => 20
|
||||
});
|
||||
|
||||
my $evals = {};
|
||||
my %builds;
|
||||
my $nrBuilds = 0;
|
||||
|
||||
foreach my $eval (@evals) {
|
||||
my @allBuilds = $eval->builds->search(
|
||||
$condition,
|
||||
{ columns => ['id', 'job', 'finished', 'buildstatus'] }
|
||||
);
|
||||
|
||||
foreach my $b (@allBuilds) {
|
||||
my $jobName = $b->get_column('job');
|
||||
|
||||
$evals->{$eval->id}->{timestamp} = $eval->timestamp;
|
||||
$evals->{$eval->id}->{builds}->{$jobName} = {
|
||||
id => $b->id,
|
||||
finished => $b->finished,
|
||||
buildstatus => $b->buildstatus
|
||||
};
|
||||
$builds{$jobName} = 1;
|
||||
$nrBuilds++;
|
||||
}
|
||||
last if $maxBuilds && $nrBuilds >= $maxBuilds;
|
||||
}
|
||||
|
||||
return ($evals, \%builds);
|
||||
}
|
||||
|
||||
|
||||
sub error {
|
||||
my ($c, $msg, $status) = @_;
|
||||
$c->response->status($status) if defined $status;
|
||||
|
Reference in New Issue
Block a user