Skip to content
Open
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
1 change: 0 additions & 1 deletion app/Console/Commands/CleanDatabase.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ public function handle(): void
// Reconfigure laravel to log to stderr for the rest of this command.
config(['logging.default' => 'stderr']);

DatabaseCleanupUtils::deleteUnusedRows('buildfailuredetails', 'id', 'buildfailure', 'detailsid');
DatabaseCleanupUtils::deleteUnusedRows('configure', 'id', 'build2configure', 'configureid');
DatabaseCleanupUtils::deleteUnusedRows('coveragefile', 'id', 'coverage', 'fileid');
DatabaseCleanupUtils::deleteUnusedRows('note', 'id', 'build2note', 'noteid');
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Controllers/BuildController.php
Original file line number Diff line number Diff line change
Expand Up @@ -934,7 +934,7 @@ public function apiViewBuildError(): JsonResponse

// Build failure table
$resolvedBuildFailures = $this->build->GetResolvedBuildFailures($type);
while ($resolvedBuildFailure = $resolvedBuildFailures->fetch()) {
foreach ($resolvedBuildFailures as $resolvedBuildFailure) {
$marshaledResolvedBuildFailure = BuildFailure::marshal($resolvedBuildFailure, $this->project, $revision, false, $buildfailure);

if ($this->project->DisplayLabels) {
Expand Down
5 changes: 2 additions & 3 deletions app/Http/Controllers/BuildPropertiesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,9 @@ private function get_defects_for_builds()
buildid IN $placeholder_str";
// Query buildfailure table.
$sql2 =
"SELECT bf.buildid, bfd.stderror AS descr
"SELECT bf.buildid, bf.stderror AS descr
FROM buildfailure bf
JOIN buildfailuredetails bfd ON bf.detailsid = bfd.id
WHERE bfd.type = $type AND
WHERE bf.type = $type AND
bf.buildid IN $placeholder_str";
} elseif ($defect === 'testfailed') {
$valid_defect = true;
Expand Down
29 changes: 17 additions & 12 deletions app/Models/RichBuildAlert.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,21 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasOne;

/**
* @property int $id
* @property int $buildid
* @property int $detailsid
* @property string $workingdirectory
* @property string $sourcefile
* @property int $newstatus
* @property int $type
* @property string $stdoutput
* @property string $stderror
* @property string $exitcondition
* @property string $language
* @property string $targetname
* @property string $outputfile
* @property string $outputtype
*
* @mixin Builder<RichBuildAlert>
*/
Expand All @@ -26,17 +32,24 @@ class RichBuildAlert extends Model

protected $fillable = [
'buildid',
'detailsid',
'workingdirectory',
'sourcefile',
'newstatus',
'type',
'stdoutput',
'stderror',
'exitcondition',
'language',
'targetname',
'outputfile',
'outputtype',
];

protected $casts = [
'id' => 'integer',
'buildid' => 'integer',
'detailsid' => 'integer',
'newstatus' => 'integer',
'type' => 'integer',
];

/**
Expand All @@ -47,14 +60,6 @@ public function build(): BelongsTo
return $this->belongsTo(Build::class, 'buildid');
}

/**
* @return HasOne<RichBuildAlertDetails, $this>
*/
public function details(): HasOne
{
return $this->hasOne(RichBuildAlertDetails::class, 'id', 'detailsid');
}

/**
* @return BelongsToMany<Label, $this>
*/
Expand Down
53 changes: 0 additions & 53 deletions app/Models/RichBuildAlertDetails.php

This file was deleted.

9 changes: 0 additions & 9 deletions app/Utils/DatabaseCleanupUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
use App\Models\CoverageFile;
use App\Models\Image;
use App\Models\Note;
use App\Models\RichBuildAlertDetails;
use App\Models\Test;
use App\Models\UploadFile;
use CDash\Database;
Expand Down Expand Up @@ -134,14 +133,6 @@ public static function removeBuild($buildid): void
// Use Eloquent relationships to delete shared records that are only
// used by builds that are about to be deleted.

// buildfailuredetails
RichBuildAlertDetails::whereHas('builds', function (Builder $query) use ($buildids): void {
$query->whereIn('build.id', $buildids);
})
->whereDoesntHave('builds', function (Builder $query) use ($buildids): void {
$query->whereNotIn('build.id', $buildids);
})->delete();

// configure
Configure::whereHas('builds', function (Builder $query) use ($buildids): void {
$query->whereIn('id', $buildids);
Expand Down
96 changes: 56 additions & 40 deletions app/Utils/SubmissionUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
use App\Http\Submission\Handlers\TestingJUnitHandler;
use App\Http\Submission\Handlers\UpdateHandler;
use App\Http\Submission\Handlers\UploadHandler;
use App\Models\RichBuildAlert;
use CDash\Database;
use CDash\Model\Build;
use CDash\Model\BuildUpdate;
Expand Down Expand Up @@ -157,7 +156,6 @@ public static function compute_error_difference($buildid, $previousbuildid, $war
$pdo = Database::getInstance()->getPdo();

$build = \App\Models\Build::findOrFail((int) $buildid);
$previous_build = \App\Models\Build::findOrFail((int) $previousbuildid);

// Look at the difference positive and negative test errors
DB::update('
Expand All @@ -182,29 +180,30 @@ public static function compute_error_difference($buildid, $previousbuildid, $war
'previousbuildid' => $previousbuildid,
]);

// Recurring buildfailures are represented by the buildfailuredetails table.
// Get a list of buildfailuredetails IDs for the current build and the
// previous build.

$current_failures = $build->richAlerts()
->whereRelation('details', 'type', $warning)
->pluck('detailsid')->toArray();

$previous_failures = $previous_build->richAlerts()
->whereRelation('details', 'type', $warning)
->pluck('detailsid')->toArray();

// Check if any of these are new failures and mark them accordingly.
foreach ($current_failures as $failure) {
if (!in_array($failure, $previous_failures)) {
RichBuildAlert::where([
'buildid' => $buildid,
'detailsid' => $failure,
])->update([
'newstatus' => 1,
]);
}
}
DB::update('
UPDATE buildfailure
SET newstatus=1
WHERE
buildid = :buildid
AND type = :type
AND NOT EXISTS(
SELECT *
FROM buildfailure buildfailure_previous
WHERE
buildfailure_previous.buildid = :previousbuildid
AND buildfailure_previous.type = buildfailure.type
AND buildfailure_previous.stderror = buildfailure.stderror
AND buildfailure_previous.sourcefile = buildfailure.sourcefile
AND buildfailure_previous.targetname = buildfailure.targetname
AND buildfailure_previous.language = buildfailure.language
AND buildfailure_previous.outputfile = buildfailure.outputfile
AND buildfailure_previous.outputtype = buildfailure.outputtype
)
', [
'buildid' => $buildid,
'type' => $warning,
'previousbuildid' => $previousbuildid,
]);

// Maybe we can get that from the query (don't know).
$npositives = $build->basicAlerts()
Expand All @@ -213,13 +212,13 @@ public static function compute_error_difference($buildid, $previousbuildid, $war
->count();

$npositives += $build->richAlerts()
->where('type', $warning)
->where('newstatus', 1)
->whereRelation('details', 'type', $warning)
->count();

// Count how many build defects were fixed since the previous build.
$stmt = $pdo->prepare('
SELECT COUNT(*)
$nnegatives = DB::select('
SELECT COUNT(*) AS c
FROM builderror builderror_previous
WHERE
builderror_previous.buildid = :previousbuildid
Expand All @@ -234,19 +233,36 @@ public static function compute_error_difference($buildid, $previousbuildid, $war
AND builderror_previous.sourcefile = builderror.sourcefile
AND builderror_previous.sourceline = builderror.sourceline
)
');
$stmt->bindValue(':buildid', $buildid);
$stmt->bindValue(':previousbuildid', $previousbuildid);
$stmt->bindValue(':type', $warning);
pdo_execute($stmt);
$negatives_array = $stmt->fetch();
$nnegatives = $negatives_array[0];
', [
'buildid' => $buildid,
'type' => $warning,
'previousbuildid' => $previousbuildid,
])[0]->c;

foreach ($previous_failures as $failure) {
if (!in_array($failure, $current_failures)) {
$nnegatives++;
}
}
$nnegatives += DB::select('
SELECT COUNT(*) AS c
FROM buildfailure buildfailure_previous
WHERE
buildfailure_previous.buildid = :previousbuildid
AND buildfailure_previous.type = :type
AND NOT EXISTS(
SELECT *
FROM buildfailure
WHERE
buildfailure.buildid = :buildid
AND buildfailure_previous.type = buildfailure.type
AND buildfailure_previous.stderror = buildfailure.stderror
AND buildfailure_previous.sourcefile = buildfailure.sourcefile
AND buildfailure_previous.targetname = buildfailure.targetname
AND buildfailure_previous.language = buildfailure.language
AND buildfailure_previous.outputfile = buildfailure.outputfile
AND buildfailure_previous.outputtype = buildfailure.outputtype
)
', [
'buildid' => $buildid,
'type' => $warning,
'previousbuildid' => $previousbuildid,
])[0]->c;

// Check if a diff already exists for this build.
DB::beginTransaction();
Expand Down
Loading