Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 15 additions & 17 deletions app/Http/Controllers/BuildController.php
Original file line number Diff line number Diff line change
Expand Up @@ -319,10 +319,10 @@ public function apiBuildSummary(): JsonResponse
SELECT *
FROM
buildupdate AS u,
build2update AS b2u
build AS b
WHERE
b2u.updateid = u.id
AND b2u.buildid = ?
b.updateid = u.id
AND b.id = ?
', [$this->build->Id])[0] ?? [];

// TODO: (williamjallen) Determine what $buildupdate was supposed to be. It is currently undefined.
Expand All @@ -334,10 +334,10 @@ public function apiBuildSummary(): JsonResponse
SELECT count(*) AS c
FROM
updatefile,
build2update AS b2u
build
WHERE
updatefile.updateid=b2u.updateid
AND b2u.buildid = ?
updatefile.updateid=build.updateid
AND build.id = ?
AND author = 'Local User'
", [$this->build->Id])[0]->c;

Expand All @@ -352,8 +352,8 @@ public function apiBuildSummary(): JsonResponse

$nupdates = (int) DB::select('
SELECT count(*) AS c
FROM updatefile, build2update AS b2u
WHERE updatefile.updateid=b2u.updateid AND b2u.buildid=?
FROM updatefile, build
WHERE updatefile.updateid=build.updateid AND build.id=?
', [$this->build->Id])[0]->c;
$update_response['nupdates'] = $nupdates;

Expand Down Expand Up @@ -436,7 +436,7 @@ public function apiBuildSummary(): JsonResponse

// Previous build
if ($previous_buildid > 0 && isset($previous_build)) {
$previous_build_update = EloquentBuild::findOrFail($previous_buildid)->updates()->first();
$previous_build_update = EloquentBuild::findOrFail($previous_buildid)->updateStep;

$response['previousbuild'] = [
'buildid' => $previous_buildid,
Expand All @@ -460,7 +460,7 @@ public function apiBuildSummary(): JsonResponse
$next_build = new Build();
$next_build->Id = $next_buildid;
$next_build->FillFromId($next_build->Id);
$next_build_update = EloquentBuild::findOrFail($next_buildid)->updates()->first();
$next_build_update = EloquentBuild::findOrFail($next_buildid)->updateStep;

$response['nextbuild'] = [
'buildid' => $next_buildid,
Expand Down Expand Up @@ -642,7 +642,7 @@ public function viewUpdatePageContent(): JsonResponse
$response['build'] = $build_response;

// Update
$update = EloquentBuild::findOrFail((int) $this->build->Id)->updates()->first();
$update = EloquentBuild::findOrFail((int) $this->build->Id)->updateStep;

$update_response = [];
if ($update !== null) {
Expand Down Expand Up @@ -896,8 +896,8 @@ public function apiViewBuildError(): JsonResponse
];

// Update
if ($eloquentBuild->updates()->exists()) {
$revision = $eloquentBuild->updates()->firstOrFail()->revision;
if ($eloquentBuild->updateStep !== null) {
$revision = $eloquentBuild->updateStep->revision;
$extra_build_fields['revision'] = $revision;
} else {
$revision = null;
Expand Down Expand Up @@ -1103,8 +1103,7 @@ public function apiBuildUpdateGraph(): JsonResponse
b.starttime,
bu.nfiles
FROM build as b
JOIN build2update AS b2u ON b2u.buildid = b.id
JOIN buildupdate AS bu ON bu.id = b2u.updateid
JOIN buildupdate AS bu ON bu.id = b.updateid
WHERE
b.siteid = ?
AND b.type = ?
Expand Down Expand Up @@ -1161,8 +1160,7 @@ public function apiGetPreviousBuilds(): JsonResponse
b.starttime,
b.endtime
FROM build AS b
LEFT JOIN build2update AS b2u ON (b2u.buildid=b.id)
LEFT JOIN buildupdate AS bu ON (b2u.updateid=bu.id)
LEFT JOIN buildupdate AS bu ON (bu.updateid=b.id)
WHERE
siteid = ?
AND b.type = ?
Expand Down
4 changes: 1 addition & 3 deletions app/Http/Controllers/SiteController.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,12 @@ public function siteStatistics(): View|RedirectResponse
AVG(submittime - buildupdate.starttime) AS elapsed
FROM
build,
build2update,
buildupdate,
project,
site
WHERE
submittime > NOW() - interval '168 hours'
AND build2update.buildid = build.id
AND buildupdate.id = build2update.updateid
AND buildupdate.id = build.updateid
AND site.id = build.siteid
AND build.projectid = project.id
GROUP BY
Expand Down
8 changes: 4 additions & 4 deletions app/Http/Controllers/TestController.php
Original file line number Diff line number Diff line change
Expand Up @@ -302,17 +302,17 @@ public function apiTestSummary(): JsonResponse|StreamedResponse
$prepared_array = Database::getInstance()->createPreparedArray(count($buildids));
$query = DB::select("
SELECT
b2u.buildid as buildid,
build.id as buildid,
status,
revision,
priorrevision,
path
FROM
buildupdate,
build2update AS b2u
build
WHERE
b2u.updateid = buildupdate.id
AND b2u.buildid IN $prepared_array
build.updateid = buildupdate.id
AND build.id IN $prepared_array
", $buildids);
foreach ($query as $row) {
$status_by_buildid[(int) $row->buildid] = $row;
Expand Down
4 changes: 3 additions & 1 deletion app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace App\Http\Controllers;

use App\Models\BuildUpdate;
use App\Models\Site;
use App\Models\User;
use App\Utils\AuthTokenUtil;
Expand Down Expand Up @@ -293,7 +294,8 @@ private function ReportLastBuild(string $type, int $projectid, int $siteid, stri
}

// Update
$BuildUpdate = $build->updates()->first();
/** @var ?BuildUpdate $BuildUpdate */
$BuildUpdate = $build->updateStep;
$response['update'] = $BuildUpdate->nfiles ?? 0;
$response['updateclass'] = $BuildUpdate !== null && $BuildUpdate->warnings > 0 ? 'error' : 'normal';

Expand Down
2 changes: 1 addition & 1 deletion app/Http/Submission/Handlers/DoneHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public function endElement($parser, $name): void
// Should we re-run any checks that were previously marked
// as pending?
if ($pendingSubmissionsModel !== null && $pendingSubmissionsModel->recheck) {
$revision = \App\Models\Build::findOrFail((int) $this->Build->Id)->updates()->first()->revision ?? '';
$revision = \App\Models\Build::findOrFail((int) $this->Build->Id)->updateStep->revision ?? '';
Repository::createOrUpdateCheck($revision);
}

Expand Down
4 changes: 2 additions & 2 deletions app/Jobs/ProcessSubmission.php
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ private static function send_update_email(UpdateHandler $handler, int $projectid

$body = "$sitename has encountered errors during the Update step and you have been identified as the maintainer of this site.\n\n";
$body .= "*Update Errors*\n";
$body .= 'Status: ' . $eloquentBuild->updates()->firstOrFail()->status . ' (' . url('/builds/' . $buildid . '/update') . ")\n";
$body .= 'Status: ' . $eloquentBuild->updateStep?->status . ' (' . url('/builds/' . $buildid . '/update') . ")\n";

Mail::raw($body, function ($message) use ($subject, $recipients): void {
$message->subject($subject)
Expand All @@ -642,7 +642,7 @@ private static function send_update_email(UpdateHandler $handler, int $projectid
/** Check for update errors for a given build. */
private static function check_email_update_errors(int $buildid): array
{
$num_errors = \App\Models\Build::findOrFail($buildid)->updates()->first()->errors ?? 0;
$num_errors = \App\Models\Build::findOrFail($buildid)->updateStep->errors ?? 0;

return [
'hasfixes' => false,
Expand Down
8 changes: 3 additions & 5 deletions app/Models/Build.php
Original file line number Diff line number Diff line change
Expand Up @@ -310,13 +310,11 @@ public function pendingSubmissions(): HasOne
}

/**
* TODO: Perhaps rename this function in the future to make it less similar to Laravel's update()?
*
* @return BelongsToMany<BuildUpdate, $this>
* @return BelongsTo<BuildUpdate, $this>
*/
public function updates(): BelongsToMany
public function updateStep(): BelongsTo
{
return $this->belongsToMany(BuildUpdate::class, 'build2update', 'buildid', 'updateid');
return $this->belongsTo(BuildUpdate::class, 'updateid');
}

/**
Expand Down
7 changes: 3 additions & 4 deletions app/Models/BuildUpdate.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Carbon;

Expand Down Expand Up @@ -63,11 +62,11 @@ protected function errors(): Attribute
}

/**
* @return BelongsToMany<Build, $this>
* @return HasMany<Build, $this>
*/
public function builds(): BelongsToMany
public function builds(): HasMany
{
return $this->belongsToMany(Build::class, 'build2update', 'updateid', 'buildid');
return $this->hasMany(Build::class, 'updateid');
}

/**
Expand Down
2 changes: 1 addition & 1 deletion app/Utils/RepositoryUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ private static function get_email_summary(int $buildid, array $errors, $errorkey
if ($errorkey === 'update_errors') {
$information = "\n\n*Update*\n";

$update = $eloquentBuild->updates()->firstOrFail();
$update = $eloquentBuild->updateStep()->firstOrFail();
$information .= "Status: {$update->status} ({$serverURI}/builds/{$buildid}/update)\n";
$information .= 'Command: ';
$information .= substr($update->command, 0, $maxchars);
Expand Down
3 changes: 1 addition & 2 deletions app/cdash/app/Controller/Api/Index.php
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,7 @@ public function getIndexQuery(): string
LEFT JOIN buildgroup AS g ON (g.id=b2g.groupid)
LEFT JOIN buildgroupposition AS gp ON (gp.buildgroupid=g.id)
LEFT JOIN site AS s ON (s.id=b.siteid)
LEFT JOIN build2update AS b2u ON (b2u.buildid=b.id)
LEFT JOIN buildupdate AS bu ON (b2u.updateid=bu.id)
LEFT JOIN buildupdate AS bu ON (b.updateid=bu.id)
LEFT JOIN coveragesummary AS cs ON (cs.buildid=b.id)
LEFT JOIN dynamicanalysissummary AS das ON (das.buildid=b.id)
LEFT JOIN builderrordiff AS be_diff ON (be_diff.buildid=b.id AND be_diff.type=0)
Expand Down
3 changes: 1 addition & 2 deletions app/cdash/app/Controller/Api/QueryTests.php
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,7 @@ public function getResponse(): array
}
if ($this->filterOnRevision) {
$filter_joins .= '
LEFT JOIN build2update b2u ON b2u.buildid = b.id
LEFT JOIN buildupdate bu ON bu.id = b2u.updateid';
LEFT JOIN buildupdate bu ON bu.id = b.updateid';
}

// Select extra data if we are filtering on test output.
Expand Down
4 changes: 2 additions & 2 deletions app/cdash/app/Controller/Api/TestDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ function () use ($query): void {
$stmt = $this->db->prepare(
'SELECT status, revision, priorrevision, path
FROM buildupdate bu
JOIN build2update b2u ON (b2u.updateid = bu.id)
WHERE b2u.buildid = :buildid');
JOIN build b ON (b.updateid = bu.id)
WHERE b.id = :buildid');
$this->db->execute($stmt, [':buildid' => $this->build->Id]);
$status_array = $stmt->fetch();
if (is_array($status_array)) {
Expand Down
3 changes: 1 addition & 2 deletions app/cdash/app/Controller/Api/Timeline.php
Original file line number Diff line number Diff line change
Expand Up @@ -210,8 +210,7 @@ private function chartForBuildGroup()
FROM build b
JOIN build2group b2g ON b2g.buildid = b.id
JOIN buildgroup bg ON bg.id = b2g.groupid
LEFT JOIN build2update b2u ON b2u.buildid = b.id
LEFT JOIN buildupdate bu ON bu.id = b2u.updateid
LEFT JOIN buildupdate bu ON bu.id = b.updateid
WHERE b.projectid = :projectid AND b.parentid IN (0, -1) AND
bg.name = :buildgroupname
ORDER BY starttime');
Expand Down
5 changes: 2 additions & 3 deletions app/cdash/app/Lib/Repository/GitHub.php
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,7 @@ public function getBuildRowsForCheck(string $head_sha): array
SELECT b.id, b.name, b.builderrors, b.configureerrors, b.testfailed,
b.done, b.starttime, bp.properties
FROM build b
JOIN build2update b2u ON b2u.buildid = b.id
JOIN buildupdate bu ON bu.id = b2u.updateid
JOIN buildupdate bu ON bu.id = b.updateid
LEFT JOIN buildproperties bp ON bp.buildid = b.id
WHERE bu.revision = :sha');
$this->db->execute($stmt, [':sha' => $head_sha]);
Expand Down Expand Up @@ -481,7 +480,7 @@ public function compareCommits(BuildUpdate $update): bool
if ($previous_buildid < 1) {
return false;
}
$previous_update = \App\Models\Build::findOrFail($previous_buildid)->updates()->first();
$previous_update = \App\Models\Build::findOrFail($previous_buildid)->updateStep;
if ($previous_update === null) {
return false;
}
Expand Down
11 changes: 5 additions & 6 deletions app/cdash/app/Model/Build.php
Original file line number Diff line number Diff line change
Expand Up @@ -1365,8 +1365,8 @@ public function ComputeUpdateStatistics(): bool
// Record user statistics for each updated file.
$updatefiles_stmt = $this->PDO->prepare(
"SELECT author,email,checkindate,filename FROM updatefile AS uf
JOIN build2update AS b2u ON b2u.updateid=uf.updateid
WHERE b2u.buildid=? AND checkindate>'1980-01-01T00:00:00'
JOIN build AS b ON b.updateid=uf.updateid
WHERE b.id=? AND checkindate>'1980-01-01T00:00:00'
ORDER BY author ASC, checkindate ASC");
pdo_execute($updatefiles_stmt, [$this->Id]);

Expand Down Expand Up @@ -2345,11 +2345,10 @@ public function GetCommitAuthors(): array
// file submission.

if ($this->CommitAuthors === []) {
$update_files = EloquentBuild::with('updates.updateFiles')
$update_files = EloquentBuild::with('updateStep.updateFiles')
->findOrFail((int) $this->Id)
->updates
->pluck('updateFiles')
->flatten();
->updateStep
->updateFiles ?? [];

$authors = [];
/** @var BuildUpdateFile $row */
Expand Down
Loading