forked from lix-project/hydra
This commit is contained in:
parent
98c53156e6
commit
7b19257830
|
@ -180,6 +180,27 @@ sub releasesets :Local {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub attrsToSQL {
|
||||||
|
my ($attrs, $id) = @_;
|
||||||
|
my @attrs = split / /, $attrs;
|
||||||
|
|
||||||
|
my $query = "1 = 1";
|
||||||
|
|
||||||
|
foreach my $attr (@attrs) {
|
||||||
|
$attr =~ /^([\w-]+)=([\w-]*)$/ or die "invalid attribute in release set: $attr";
|
||||||
|
my $name = $1;
|
||||||
|
my $value = $2;
|
||||||
|
# !!! Yes, this is horribly injection-prone... (though
|
||||||
|
# name/value are filtered above). Should use SQL::Abstract,
|
||||||
|
# but it can't deal with subqueries. At least we should use
|
||||||
|
# placeholders.
|
||||||
|
$query .= " and (select count(*) from buildinputs where build = $id and name = '$name' and value = '$value') = 1";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub releases :Local {
|
sub releases :Local {
|
||||||
my ($self, $c, $projectName, $releaseName) = @_;
|
my ($self, $c, $projectName, $releaseName) = @_;
|
||||||
$c->stash->{template} = 'releases.tt';
|
$c->stash->{template} = 'releases.tt';
|
||||||
|
@ -196,10 +217,13 @@ sub releases :Local {
|
||||||
return error($c, "Release set $releaseName doesn't have a primary job.") if !defined $primaryJob;
|
return error($c, "Release set $releaseName doesn't have a primary job.") if !defined $primaryJob;
|
||||||
|
|
||||||
$c->stash->{jobs} = [$releaseSet->releasesetjobs->search({}, {order_by => "isprimary DESC"})];
|
$c->stash->{jobs} = [$releaseSet->releasesetjobs->search({}, {order_by => "isprimary DESC"})];
|
||||||
|
|
||||||
my @primaryBuilds = $project->builds->search(
|
my @primaryBuilds = $project->builds->search(
|
||||||
{ attrname => $primaryJob->job, finished => 1 },
|
{ attrname => $primaryJob->job, finished => 1 },
|
||||||
{ join => 'resultInfo', order_by => "timestamp DESC", '+select' => ["resultInfo.releasename"], '+as' => ["releasename"] });
|
{ join => 'resultInfo', order_by => "timestamp DESC"
|
||||||
|
, '+select' => ["resultInfo.releasename"], '+as' => ["releasename"]
|
||||||
|
, where => \ attrsToSQL($primaryJob->attrs, "me.id")
|
||||||
|
});
|
||||||
|
|
||||||
my @releases = ();
|
my @releases = ();
|
||||||
|
|
||||||
|
@ -220,7 +244,9 @@ sub releases :Local {
|
||||||
($thisBuild) = $primaryBuild->dependentBuilds->search(
|
($thisBuild) = $primaryBuild->dependentBuilds->search(
|
||||||
{ attrname => $job->job, finished => 1 },
|
{ attrname => $job->job, finished => 1 },
|
||||||
{ join => 'resultInfo', rows => 1
|
{ join => 'resultInfo', rows => 1
|
||||||
, order_by => ["buildstatus", "timestamp"] });
|
, order_by => ["buildstatus", "timestamp"]
|
||||||
|
, where => \ attrsToSQL($job->attrs, "build.id")
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($job->mayfail != 1) {
|
if ($job->mayfail != 1) {
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
[% WRAPPER layout.tt title="Releases" %]
|
[% WRAPPER layout.tt title="Release Set ‘$releaseSet.project.name:$releaseSet.name’" %]
|
||||||
[% PROCESS common.tt %]
|
[% PROCESS common.tt %]
|
||||||
[% USE HTML %]
|
[% USE HTML %]
|
||||||
|
|
||||||
<h1>Releases</h1>
|
<h1>Release Set <tt>[% releaseSet.project.name %]:[% releaseSet.name %]</tt></h1>
|
||||||
|
|
||||||
<!-- <p>Description: [% releaseSet.description %]</p> -->
|
|
||||||
|
|
||||||
<table class="tablesorter">
|
<table class="tablesorter">
|
||||||
<thead>
|
<thead>
|
||||||
|
|
Loading…
Reference in a new issue