diff --git a/app/Console/Commands/CleanupDatabase.php b/app/Console/Commands/CleanupDatabase.php
new file mode 100644
index 0000000000..fb7cc8b72f
--- /dev/null
+++ b/app/Console/Commands/CleanupDatabase.php
@@ -0,0 +1,90 @@
+min($field);
+ $max = DB::table($table)->max($field);
+ if (!is_numeric($start) || !is_numeric($max)) {
+ echo "Could not determine min and max for $field on $table\n";
+ return;
+ }
+
+ $start = intval($start);
+ $max = intval($max);
+
+ $total = $max - $start;
+ if ($total < 1) {
+ return;
+ }
+ $num_done = 0;
+ $next_report = 10;
+ $done = false;
+ echo "Pruning unused rows from $table\n";
+ while (!$done) {
+ $end = $start + 49999;
+ DB::delete("
+ DELETE FROM $table
+ WHERE $field BETWEEN $start AND $end
+ AND $field NOT IN (SELECT $selectfield FROM $targettable)");
+ $num_done += 50000;
+ if ($end >= $max) {
+ $done = true;
+ } else {
+ usleep(1);
+ $start += 50000;
+ // Calculate percentage of work completed so far.
+ $percent = round(($num_done / $total) * 100, -1);
+ if ($percent > $next_report) {
+ echo "{$percent}%\n";
+ $next_report = $next_report + 10;
+ }
+ }
+ }
+ }
+}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 20e6ebce3d..d5292969f1 100755
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -3,6 +3,8 @@
namespace App\Console;
use App\Jobs\PruneAuthTokens;
+use App\Jobs\PruneBuilds;
+use App\Jobs\PruneDatabase;
use App\Jobs\PruneJobs;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@@ -25,11 +27,19 @@ protected function schedule(Schedule $schedule)
->everySixHours()
->sendOutputTo($output_filename);
- $schedule->job(new PruneJobs())
+ $schedule->job(new PruneAuthTokens(), 'low')
->hourly()
->withoutOverlapping();
- $schedule->job(new PruneAuthTokens())
+ $schedule->job(new PruneBuilds(), 'low')
+ ->hourly()
+ ->withoutOverlapping();
+
+ $schedule->job(new PruneDatabase(), 'low')
+ ->dailyAt('03:00')
+ ->withoutOverlapping();
+
+ $schedule->job(new PruneJobs(), 'low')
->hourly()
->withoutOverlapping();
diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php
index 1eb47e8c60..4b862c7124 100644
--- a/app/Http/Controllers/AdminController.php
+++ b/app/Http/Controllers/AdminController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\User;
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Project;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
@@ -96,7 +97,7 @@ public function removeBuilds(): View|RedirectResponse
$builds[] = (int) $build_array->id;
}
- remove_build_chunked($builds);
+ DatabaseCleanupUtils::removeBuildChunked($builds);
$alert = 'Removed ' . count($builds) . ' builds.';
}
@@ -325,12 +326,9 @@ public function upgrade()
@$AssignBuildToDefaultGroups = $_POST['AssignBuildToDefaultGroups'];
@$FixBuildBasedOnRule = $_POST['FixBuildBasedOnRule'];
- @$DeleteBuildsWrongDate = $_POST['DeleteBuildsWrongDate'];
- @$CheckBuildsWrongDate = $_POST['CheckBuildsWrongDate'];
@$ComputeTestTiming = $_POST['ComputeTestTiming'];
@$ComputeUpdateStatistics = $_POST['ComputeUpdateStatistics'];
- @$Cleanup = $_POST['Cleanup'];
@$Dependencies = $_POST['Dependencies'];
@$Audit = $_POST['Audit'];
@$ClearAudit = $_POST['Clear'];
@@ -376,80 +374,6 @@ public function upgrade()
unlink($configFile);
}
-
- /* Cleanup the database */
- if ($Cleanup) {
- self::delete_unused_rows('banner', 'projectid', 'project');
- self::delete_unused_rows('blockbuild', 'projectid', 'project');
- self::delete_unused_rows('build', 'projectid', 'project');
- self::delete_unused_rows('buildgroup', 'projectid', 'project');
- self::delete_unused_rows('labelemail', 'projectid', 'project');
- self::delete_unused_rows('project2repositories', 'projectid', 'project');
- self::delete_unused_rows('dailyupdate', 'projectid', 'project');
- self::delete_unused_rows('subproject', 'projectid', 'project');
- self::delete_unused_rows('coveragefilepriority', 'projectid', 'project');
- self::delete_unused_rows('user2project', 'projectid', 'project');
- self::delete_unused_rows('userstatistics', 'projectid', 'project');
-
- self::delete_unused_rows('build2configure', 'buildid', 'build');
- self::delete_unused_rows('build2note', 'buildid', 'build');
- self::delete_unused_rows('build2test', 'buildid', 'build');
- self::delete_unused_rows('buildemail', 'buildid', 'build');
- self::delete_unused_rows('builderror', 'buildid', 'build');
- self::delete_unused_rows('builderrordiff', 'buildid', 'build');
- self::delete_unused_rows('buildfailure', 'buildid', 'build');
- self::delete_unused_rows('buildfailuredetails', 'id', 'buildfailure', 'detailsid');
- self::delete_unused_rows('buildtesttime', 'buildid', 'build');
- self::delete_unused_rows('configure', 'id', 'build2configure', 'configureid');
- self::delete_unused_rows('configureerror', 'configureid', 'configure');
- self::delete_unused_rows('configureerrordiff', 'buildid', 'build');
- self::delete_unused_rows('coverage', 'buildid', 'build');
- self::delete_unused_rows('coveragefilelog', 'buildid', 'build');
- self::delete_unused_rows('coveragesummary', 'buildid', 'build');
- self::delete_unused_rows('coveragesummarydiff', 'buildid', 'build');
- self::delete_unused_rows('dynamicanalysis', 'buildid', 'build');
- self::delete_unused_rows('label2build', 'buildid', 'build');
- self::delete_unused_rows('subproject2build', 'buildid', 'build');
- self::delete_unused_rows('summaryemail', 'buildid', 'build');
- self::delete_unused_rows('testdiff', 'buildid', 'build');
-
- self::delete_unused_rows('dynamicanalysisdefect', 'dynamicanalysisid', 'dynamicanalysis');
- self::delete_unused_rows('subproject2subproject', 'subprojectid', 'subproject');
-
- self::delete_unused_rows('dailyupdatefile', 'dailyupdateid', 'dailyupdate');
- self::delete_unused_rows('coveragefile', 'id', 'coverage', 'fileid');
-
- self::delete_unused_rows('dailyupdatefile', 'dailyupdateid', 'dailyupdate');
- self::delete_unused_rows('test2image', 'outputid', 'testoutput');
-
- $xml .= add_XML_value('alert', 'Database cleanup complete.');
- }
-
- /* Check the builds with wrong date */
- if ($CheckBuildsWrongDate) {
- $currentdate = time() + 3600 * 24 * 3; // or 3 days away from now
- $forwarddate = date(FMT_DATETIME, $currentdate);
-
- $builds = pdo_query("SELECT id,name,starttime FROM build WHERE starttime<'1975-12-31 23:59:59' OR starttime>'$forwarddate'");
- while ($builds_array = pdo_fetch_array($builds)) {
- echo $builds_array['name'] . '-' . $builds_array['starttime'] . ' ';
- }
- }
-
- /* Delete the builds with wrong date */
- if ($DeleteBuildsWrongDate) {
- $currentdate = time() + 3600 * 24 * 3; // or 3 days away from now
- $forwarddate = date(FMT_DATETIME, $currentdate);
-
- $builds = pdo_query(
- "SELECT id FROM build WHERE parentid IN (0, -1) AND
- starttime<'1975-12-31 23:59:59' OR starttime>'$forwarddate'");
- while ($builds_array = pdo_fetch_array($builds)) {
- $buildid = $builds_array['id'];
- remove_build($buildid);
- }
- }
-
if ($FixBuildBasedOnRule) {
// loop through the list of build2group
$buildgroups = pdo_query('SELECT * from build2group');
@@ -505,11 +429,4 @@ public function userStatistics(): View
{
return $this->angular_view('userStatistics');
}
-
- /** Delete unused rows */
- private static function delete_unused_rows($table, $field, $targettable, $selectfield = 'id'): void
- {
- DB::delete("DELETE FROM $table WHERE $field NOT IN (SELECT $selectfield AS $field FROM $targettable)");
- echo pdo_error();
- }
}
diff --git a/app/Http/Controllers/BuildController.php b/app/Http/Controllers/BuildController.php
index 2b64f88c10..0a6a3260eb 100644
--- a/app/Http/Controllers/BuildController.php
+++ b/app/Http/Controllers/BuildController.php
@@ -4,6 +4,7 @@
use App\Models\Comment;
use App\Models\User;
use App\Models\Build as EloquentBuild;
+use App\Utils\DatabaseCleanupUtils;
use App\Utils\PageTimer;
use App\Utils\RepositoryUtils;
use App\Utils\TestingDay;
@@ -1470,7 +1471,7 @@ private function restApiPost(): JsonResponse
private function restApiDelete(): JsonResponse
{
Log::info("Build #{$this->build->Id} removed manually.");
- remove_build($this->build->Id);
+ DatabaseCleanupUtils::removeBuild($this->build->Id);
return response()->json();
}
}
diff --git a/app/Jobs/PruneBuilds.php b/app/Jobs/PruneBuilds.php
new file mode 100644
index 0000000000..3b9d6ba2a0
--- /dev/null
+++ b/app/Jobs/PruneBuilds.php
@@ -0,0 +1,30 @@
+|int $buildid
+ * @throws \InvalidArgumentException
+ */
+ public static function removeBuild($buildid) : void
+ {
+ // TODO: (williamjallen) much of this work could be done on the DB side automatically by setting up
+ // proper foreign-key relationships between between entities, and using the DB's cascade functionality.
+ // For complex cascades, custom SQL functions can be written.
+
+ if (!is_array($buildid)) {
+ $buildid = [$buildid];
+ }
+
+ $buildids = [];
+ foreach ($buildid as $b) {
+ if (!is_numeric($b)) {
+ throw new \InvalidArgumentException('Invalid Build ID');
+ }
+ $buildids[] = intval($b);
+ }
+
+ $db = Database::getInstance();
+ $buildid_prepare_array = $db->createPreparedArray(count($buildids));
+
+ // Remove the buildfailureargument
+ $buildfailureids = [];
+ $buildfailure = DB::select("SELECT id FROM buildfailure WHERE buildid IN $buildid_prepare_array", $buildids);
+ foreach ($buildfailure as $buildfailure_array) {
+ $buildfailureids[] = intval($buildfailure_array->id);
+ }
+ if (count($buildfailureids) > 0) {
+ $buildfailure_prepare_array = $db->createPreparedArray(count($buildfailureids));
+ DB::delete("DELETE FROM buildfailure2argument WHERE buildfailureid IN $buildfailure_prepare_array", $buildfailureids);
+ }
+
+ // Remove any children of these builds.
+ // In order to avoid making the list of builds to delete too large
+ // we delete them in batches (one batch per parent).
+ foreach ($buildids as $parentid) {
+ $child_result = DB::select('SELECT id FROM build WHERE parentid=?', [intval($parentid)]);
+
+ $childids = [];
+ foreach ($child_result as $child_array) {
+ $childids[] = intval($child_array->id);
+ }
+ if (!empty($childids)) {
+ self::removeBuildChunked($childids);
+ }
+ }
+
+ // Only delete the buildid at the end so that no other build can get it in the meantime
+ DB::delete("DELETE FROM build WHERE id IN $buildid_prepare_array", $buildids);
+ }
+
+ /**
+ * Call removeBuild() one at a time.
+ * @param array|int $buildids
+ */
+ public static function removeBuildChunked($buildids): void
+ {
+ if (!is_array($buildids)) {
+ self::removeBuild($buildids);
+ }
+ foreach ($buildids as $buildid) {
+ self::removeBuild($buildid);
+ usleep(1);
+ }
}
}
diff --git a/app/Utils/SubmissionUtils.php b/app/Utils/SubmissionUtils.php
index d69a103e99..412f786617 100644
--- a/app/Utils/SubmissionUtils.php
+++ b/app/Utils/SubmissionUtils.php
@@ -91,7 +91,7 @@ public static function add_build(Build $build)
if ($buildid > 0 && !$build->Append) {
$build->Id = $buildid;
if ($build->GetDone()) {
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
$build->Id = null;
}
}
diff --git a/app/cdash/app/Model/Build.php b/app/cdash/app/Model/Build.php
index b5ceadc92d..9060eba9dd 100644
--- a/app/cdash/app/Model/Build.php
+++ b/app/cdash/app/Model/Build.php
@@ -18,6 +18,7 @@
use App\Models\Test;
use App\Models\Site;
+use App\Utils\DatabaseCleanupUtils;
use App\Utils\RepositoryUtils;
use App\Utils\SubmissionUtils;
use App\Utils\TestingDay;
@@ -2199,7 +2200,7 @@ public function RemoveIfDone(): bool
return false;
}
- remove_build($this->Id);
+ DatabaseCleanupUtils::removeBuild($this->Id);
$this->Id = 0;
return true;
}
diff --git a/app/cdash/include/common.php b/app/cdash/include/common.php
index 8bda2bc22a..57ac44c0b2 100644
--- a/app/cdash/include/common.php
+++ b/app/cdash/include/common.php
@@ -14,6 +14,7 @@
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
+use App\Utils\DatabaseCleanupUtils;
use App\Utils\SubmissionUtils;
use Illuminate\Support\Facades\Auth;
@@ -407,311 +408,7 @@ function remove_project_builds($projectid): void
foreach ($build as $build_array) {
$buildids[] = (int) $build_array->id;
}
- remove_build_chunked($buildids);
-}
-
-/**
- * Remove all related inserts for a given build or any build in an array of builds
- */
-function remove_build($buildid)
-{
- // TODO: (williamjallen) much of this work could be done on the DB side automatically by setting up
- // proper foreign-key relationships between between entities, and using the DB's cascade functionality.
- // For complex cascades, custom SQL functions can be written.
-
- if (!is_array($buildid)) {
- $buildid = [$buildid];
- }
-
- $buildids = [];
- foreach ($buildid as $b) {
- if (!is_numeric($b)) {
- throw new InvalidArgumentException('Invalid Build ID');
- }
- $buildids[] = intval($b);
- }
-
- $db = Database::getInstance();
- $buildid_prepare_array = $db->createPreparedArray(count($buildids));
-
- // Remove the buildfailureargument
- $buildfailureids = [];
- $buildfailure = DB::select("SELECT id FROM buildfailure WHERE buildid IN $buildid_prepare_array", $buildids);
- foreach ($buildfailure as $buildfailure_array) {
- $buildfailureids[] = intval($buildfailure_array->id);
- }
- if (count($buildfailureids) > 0) {
- $buildfailure_prepare_array = $db->createPreparedArray(count($buildfailureids));
- DB::delete("DELETE FROM buildfailure2argument WHERE buildfailureid IN $buildfailure_prepare_array", $buildfailureids);
- DB::delete("DELETE FROM label2buildfailure WHERE buildfailureid IN $buildfailure_prepare_array", $buildfailureids);
- }
-
- // Delete buildfailuredetails that are only used by builds that are being
- // deleted.
- DB::delete("
- DELETE FROM buildfailuredetails WHERE id IN (
- SELECT a.detailsid
- FROM buildfailure AS a
- LEFT JOIN buildfailure AS b ON (
- a.detailsid=b.detailsid
- AND b.buildid NOT IN $buildid_prepare_array
- )
- WHERE a.buildid IN $buildid_prepare_array
- GROUP BY a.detailsid
- HAVING count(b.detailsid)=0
- )
- ", array_merge($buildids, $buildids));
-
- // Delete the configure if not shared.
- $build2configure = DB::select("
- SELECT a.configureid
- FROM build2configure AS a
- LEFT JOIN build2configure AS b ON (
- a.configureid=b.configureid
- AND b.buildid NOT IN $buildid_prepare_array
- )
- WHERE a.buildid IN $buildid_prepare_array
- GROUP BY a.configureid
- HAVING count(b.configureid)=0
- ", array_merge($buildids, $buildids));
-
- $configureids = [];
- foreach ($build2configure as $build2configure_array) {
- // It is safe to delete this configure because it is only used
- // by builds that are being deleted.
- $configureids[] = intval($build2configure_array->configureid);
- }
- if (count($configureids) > 0) {
- $configureids_prepare_array = $db->createPreparedArray(count($configureids));
- DB::delete("DELETE FROM configure WHERE id IN $configureids_prepare_array", $configureids);
- DB::delete("DELETE FROM configureerror WHERE configureid IN $configureids_prepare_array", $configureids);
- }
-
- // coverage files are kept unless they are shared
- DB::delete("
- DELETE FROM coveragefile
- WHERE id IN (
- SELECT f1.id
- FROM (
- SELECT a.fileid AS id, COUNT(DISTINCT a.buildid) AS c
- FROM coverage a
- WHERE a.buildid IN $buildid_prepare_array
- GROUP BY a.fileid
- ) AS f1
- INNER JOIN (
- SELECT b.fileid AS id, COUNT(DISTINCT b.buildid) AS c
- FROM coverage b
- INNER JOIN (
- SELECT fileid
- FROM coverage
- WHERE buildid IN $buildid_prepare_array
- ) AS d ON b.fileid = d.fileid
- GROUP BY b.fileid
- ) AS f2 ON (f1.id = f2.id)
- WHERE f1.c = f2.c
- )
- ", array_merge($buildids, $buildids));
-
- // dynamicanalysisdefect
- $dynamicanalysis = DB::select("
- SELECT id
- FROM dynamicanalysis
- WHERE buildid IN $buildid_prepare_array
- ", $buildids);
-
- $dynids = [];
- foreach ($dynamicanalysis as $dynamicanalysis_array) {
- $dynids[] = intval($dynamicanalysis_array->id);
- }
-
- if (count($dynids) > 0) {
- $dynids_prepare_array = $db->createPreparedArray(count($dynids));
- DB::delete("DELETE FROM dynamicanalysisdefect WHERE dynamicanalysisid IN $dynids_prepare_array", $dynids);
- DB::delete("DELETE FROM label2dynamicanalysis WHERE dynamicanalysisid IN $dynids_prepare_array", $dynids);
- }
-
- // Delete the note if not shared
- DB::delete("
- DELETE FROM note WHERE id IN (
- SELECT f1.id
- FROM (
- SELECT a.noteid AS id, COUNT(DISTINCT a.buildid) AS c
- FROM build2note a
- WHERE a.buildid IN $buildid_prepare_array
- GROUP BY a.noteid
- ) AS f1
- INNER JOIN (
- SELECT b.noteid AS id, COUNT(DISTINCT b.buildid) AS c
- FROM build2note b
- INNER JOIN (
- SELECT noteid
- FROM build2note
- WHERE buildid IN $buildid_prepare_array
- ) AS d ON b.noteid = d.noteid
- GROUP BY b.noteid
- ) AS f2 ON (f1.id = f2.id)
- WHERE f1.c = f2.c
- )
- ", array_merge($buildids, $buildids));
-
- // Delete the update if not shared
- $build2update = DB::select("
- SELECT a.updateid
- FROM build2update AS a
- LEFT JOIN build2update AS b ON (
- a.updateid=b.updateid
- AND b.buildid NOT IN $buildid_prepare_array
- )
- WHERE a.buildid IN $buildid_prepare_array
- GROUP BY a.updateid
- HAVING count(b.updateid)=0
- ", array_merge($buildids, $buildids));
-
- $updateids = [];
- foreach ($build2update as $build2update_array) {
- // Update is not shared we delete
- $updateids[] = intval($build2update_array->updateid);
- }
-
- if (count($updateids) > 0) {
- $updateids_prepare_array = $db->createPreparedArray(count($updateids));
- DB::delete("DELETE FROM buildupdate WHERE id IN $updateids_prepare_array", $updateids);
- DB::delete("DELETE FROM updatefile WHERE updateid IN $updateids_prepare_array", $updateids);
- }
-
- // Delete tests and testoutputs that are not shared.
- // First find all the tests and testoutputs from builds that are about to be deleted.
- $b2t_result = DB::select("
- SELECT DISTINCT outputid
- FROM build2test
- WHERE buildid IN $buildid_prepare_array
- ", $buildids);
-
- $all_outputids = [];
- foreach ($b2t_result as $b2t_row) {
- $all_outputids[] = intval($b2t_row->outputid);
- }
-
- // Delete un-shared testoutput rows.
- if (!empty($all_outputids)) {
- // Next identify tests from this list that should be preserved
- // because they are shared with builds that are not about to be deleted.
- $all_outputids_prepare_array = $db->createPreparedArray(count($all_outputids));
- $save_test_result = DB::select("
- SELECT DISTINCT outputid
- FROM build2test
- WHERE
- outputid IN $all_outputids_prepare_array
- AND buildid NOT IN $buildid_prepare_array
- ", array_merge($all_outputids, $buildids));
- $testoutputs_to_save = [];
- foreach ($save_test_result as $save_test_row) {
- $testoutputs_to_save[] = intval($save_test_row->outputid);
- }
-
- // Use array_diff to get the list of tests that should be deleted.
- $testoutputs_to_delete = array_diff($all_outputids, $testoutputs_to_save);
- if (!empty($testoutputs_to_delete)) {
- delete_rows_chunked('DELETE FROM testoutput WHERE id IN ', $testoutputs_to_delete);
-
- $testoutputs_to_delete_prepare_array = $db->createPreparedArray(count($testoutputs_to_delete));
- // Check if the images for the test are not shared
- $test2image = DB::select("
- SELECT a.imgid
- FROM test2image AS a
- LEFT JOIN test2image AS b ON (
- a.imgid=b.imgid
- AND b.outputid NOT IN $testoutputs_to_delete_prepare_array
- )
- WHERE a.outputid IN $testoutputs_to_delete_prepare_array
- GROUP BY a.imgid
- HAVING count(b.imgid)=0
- ", array_merge($testoutputs_to_delete, $testoutputs_to_delete));
-
- $imgids = [];
- foreach ($test2image as $test2image_array) {
- $imgids[] = intval($test2image_array->imgid);
- }
-
- if (count($imgids) > 0) {
- $imgids_prepare_array = $db->createPreparedArray(count($imgids));
- DB::delete("DELETE FROM image WHERE id IN $imgids_prepare_array", $imgids);
- }
- delete_rows_chunked('DELETE FROM test2image WHERE outputid IN ', $testoutputs_to_delete);
- }
- }
-
- // Delete the uploaded files if not shared
- $build2uploadfiles = DB::select("
- SELECT a.fileid
- FROM build2uploadfile AS a
- LEFT JOIN build2uploadfile AS b ON (
- a.fileid=b.fileid
- AND b.buildid NOT IN $buildid_prepare_array
- )
- WHERE a.buildid IN $buildid_prepare_array
- GROUP BY a.fileid
- HAVING count(b.fileid)=0
- ", array_merge($buildids, $buildids));
-
- $fileids = [];
- foreach ($build2uploadfiles as $build2uploadfile_array) {
- $fileid = intval($build2uploadfile_array->fileid);
- $fileids[] = $fileid;
- unlink_uploaded_file($fileid);
- }
-
- if (count($fileids) > 0) {
- $fileids_prepare_array = $db->createPreparedArray(count($fileids));
- DB::delete("DELETE FROM uploadfile WHERE id IN $fileids_prepare_array", $fileids);
- DB::delete("DELETE FROM build2uploadfile WHERE fileid IN $fileids_prepare_array", $fileids);
- }
-
- // Remove any children of these builds.
- // In order to avoid making the list of builds to delete too large
- // we delete them in batches (one batch per parent).
- foreach ($buildids as $parentid) {
- $child_result = DB::select('SELECT id FROM build WHERE parentid=?', [intval($parentid)]);
-
- $childids = [];
- foreach ($child_result as $child_array) {
- $childids[] = intval($child_array->id);
- }
- if (!empty($childids)) {
- remove_build($childids);
- }
- }
-
- // Only delete the buildid at the end so that no other build can get it in the meantime
- DB::delete("DELETE FROM build WHERE id IN $buildid_prepare_array", $buildids);
-
- add_last_sql_error('remove_build');
-}
-
-/**
- * Call remove_build() in batches of 100.
- */
-function remove_build_chunked($buildid): void
-{
- if (!is_array($buildid)) {
- remove_build($buildid);
- }
- foreach (array_chunk($buildid, 100) as $chunk) {
- remove_build($chunk);
- }
-}
-
-/**
- * Chunk up DELETE queries into batches of 100.
- */
-function delete_rows_chunked(string $query, array $ids): void
-{
- foreach (array_chunk($ids, 100) as $chunk) {
- $chunk_prepared_array = Database::getInstance()->createPreparedArray(count($chunk));
- DB::delete("$query $chunk_prepared_array", $chunk);
- // Sleep for a microsecond to give other processes a chance.
- usleep(1);
- }
+ DatabaseCleanupUtils::removeBuildChunked($buildids);
}
/**
diff --git a/app/cdash/include/dailyupdates.php b/app/cdash/include/dailyupdates.php
index 8877841521..668840aa23 100644
--- a/app/cdash/include/dailyupdates.php
+++ b/app/cdash/include/dailyupdates.php
@@ -22,7 +22,6 @@
require_once 'include/cdashmail.php';
-use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
use CDash\Model\BuildGroup;
use CDash\Model\BuildGroupRule;
@@ -1151,9 +1150,5 @@ function addDailyChanges(int $projectid): void
$buildgroup->SetId($row['id']);
$buildgroup->Delete();
}
-
- // Remove the first builds of the project
- DatabaseCleanupUtils::removeFirstBuilds($projectid, $project->AutoremoveTimeframe, $project->AutoremoveMaxBuilds);
- DatabaseCleanupUtils::removeBuildsGroupwise($projectid, $project->AutoremoveMaxBuilds);
}
}
diff --git a/app/cdash/public/upgrade.xsl b/app/cdash/public/upgrade.xsl
index 6142c3acf9..82d5e22871 100644
--- a/app/cdash/public/upgrade.xsl
+++ b/app/cdash/public/upgrade.xsl
@@ -18,10 +18,6 @@
Fix build group based on build rules:
-
-
Delete builds with wrong start date:
-
-
Compute test timing:
for the last days
@@ -30,10 +26,6 @@
Compute update statistics:
for the last days
-
-
Cleanup CDash (can take a long time):
-
-
Manage CDash dependencies:
diff --git a/app/cdash/tests/autoremovebuilds/CMakeLists.txt b/app/cdash/tests/autoremovebuilds/CMakeLists.txt
index afdf392d3b..df55f3f9ef 100644
--- a/app/cdash/tests/autoremovebuilds/CMakeLists.txt
+++ b/app/cdash/tests/autoremovebuilds/CMakeLists.txt
@@ -1,10 +1,6 @@
# These tests should go last so the removal of builds doesn't clobber other tests
-
-add_php_test(autoremovebuilds_on_submit)
-set_tests_properties(autoremovebuilds_on_submit PROPERTIES DEPENDS cypress/e2e/build-configure)
-
add_php_test(deletesubproject)
-set_tests_properties(deletesubproject PROPERTIES DEPENDS autoremovebuilds_on_submit)
+set_tests_properties(deletesubproject PROPERTIES DEPENDS cypress/e2e/build-configure)
add_test(
NAME removebuilds
diff --git a/app/cdash/tests/test_autoremovebuilds_on_submit.php b/app/cdash/tests/test_autoremovebuilds_on_submit.php
deleted file mode 100644
index 80b45be4ce..0000000000
--- a/app/cdash/tests/test_autoremovebuilds_on_submit.php
+++ /dev/null
@@ -1,168 +0,0 @@
-config_file = base_path('.env');
- }
-
- public function __destruct()
- {
- rename("{$this->config_file}.bak", $this->config_file);
- }
-
- public function enableAutoRemoveConfigSetting()
- {
- copy($this->config_file, "{$this->config_file}.bak");
- file_put_contents($this->config_file, "AUTOREMOVE_BUILDS=true", FILE_APPEND);
- }
-
- public function setAutoRemoveTimeFrame()
- {
- // set project autoremovetimeframe
- $db = Database::getInstance();
- $sql = 'UPDATE project SET autoremovetimeframe=:time WHERE name=:project';
- /** @var PDOStatement $stmt */
- $stmt = $db->prepare($sql);
- $stmt->bindValue(':time', 7);
- $stmt->bindValue(':project', 'EmailProjectExample');
- $stmt->execute();
- }
-
- public function testBuildsRemovedOnSubmission()
- {
- $this->enableAutoRemoveConfigSetting();
-
- $this->setAutoRemoveTimeFrame();
- $this->deleteLog($this->logfilename);
-
- /** @var \CDash\Database $db */
- $db = Database::getInstance();
-
- $result = $db->query("SELECT id FROM project WHERE name = 'EmailProjectExample'");
- $projectid = $result->fetchColumn();
-
- // Submit the first build
- $rep = dirname(__FILE__) . '/data/EmailProjectExample';
- $testxml1 = "$rep/1_test.xml";
-
- if (!$this->submission('EmailProjectExample', $testxml1)) {
- $this->fail('submission 1 failed');
- return;
- }
-
- // Check that the test is actually there
- $sql = "SELECT name FROM build WHERE projectid=:id AND stamp=:stamp";
-
- /** @var PDOStatement $stmt */
- $stmt = $db->prepare($sql);
- $stmt->bindValue(':id', $projectid);
- $stmt->bindValue(':stamp', '20090223-0100-Nightly');
-
- if (!$stmt->execute()) {
- $this->fail('pdo_query returned false');
- return 1;
- }
- $query_array = pdo_fetch_array($stmt);
-
- if ($query_array[0] != 'Win32-MSVC2009') {
- echo $query_array[0];
- $this->fail('First build not inserted correctly');
- return 1;
- }
-
- // Make an expired buildgroup and rule to verify that they get deleted.
- $projectid = get_project_id('EmailProjectExample');
- $new_build_group = new BuildGroup();
- $new_build_group->SetProjectId($projectid);
- $new_build_group->SetName('delete me');
- $new_build_group->SetEndTime(Carbon::create(2010));
- $new_build_group->Save();
- $new_group_id = $new_build_group->GetId();
-
- $existing_build_group = new BuildGroup();
- $existing_build_group->SetProjectId($projectid);
- $existing_build_group->SetName('Experimental');
- $existing_group_id = $existing_build_group->GetId();
- $db = Database::getInstance();
- $stmt = $db->prepare(
- 'INSERT INTO build2grouprule (groupid, endtime)
- VALUES (:groupid, :endtime)');
- $query_params = [
- ':groupid' => $existing_group_id,
- ':endtime' => '2010-02-25 00:00:00',
- ];
- $db->execute($stmt, $query_params);
-
- // Looks like it's a new day
- DB::delete("DELETE FROM dailyupdate WHERE projectid='{$projectid}'");
-
- $testxml2 = "$rep/2_test.xml";
- if (!$this->submission('EmailProjectExample', $testxml2)) {
- $this->fail('submission 2 failed');
- return 1;
- }
-
- // The removal of the builds are done asynchronously so we might need to wait a little bit
- // in order for the process to be done
- sleep(10); // seconds
-
- $sql = "SELECT id FROM build WHERE projectid=? AND stamp=?";
-
- $results = DB::select($sql, [$projectid, '20090223-0100-Nightly']);
-
- if (count($results) > 0) {
- $this->fail('Auto remove build on submit failed');
- return 1;
- }
-
- // Check that the build group and rule were properly deleted.
- $stmt = $db->prepare('SELECT id FROM buildgroup WHERE id = ?');
- $db->execute($stmt, [$new_group_id]);
- if ($stmt->fetchColumn()) {
- $this->fail('build group not deleted');
- }
- $stmt = $db->prepare('SELECT groupid FROM build2grouprule WHERE id = ? AND endtime = ?');
- $db->execute($stmt, [$existing_group_id, '2010-01-01 00:00:00']);
- if ($stmt->fetchColumn()) {
- $this->fail('build group rule not deleted');
- }
-
- // Make sure we didn't inadvertently delete the whole upload directory.
- if (!Storage::exists('upload')) {
- $this->fail('upload directory does not exist');
- }
-
- // Make sure the dailyupdate was recorded for the correct day.
- $stmt = $db->prepare('SELECT date FROM dailyupdate WHERE projectid = ?');
- $db->execute($stmt, [$projectid]);
- $found = $stmt->fetchColumn();
- $project = new Project();
- $project->Id = $projectid;
- $project->Fill();
- $expected = TestingDay::get($project, date(FMT_DATETIME));
- $this->assertEqual($expected, $found);
-
- $this->pass('Passed');
- }
-}
diff --git a/app/cdash/tests/test_bazeljson.php b/app/cdash/tests/test_bazeljson.php
index 30b6de050c..1b3936d634 100644
--- a/app/cdash/tests/test_bazeljson.php
+++ b/app/cdash/tests/test_bazeljson.php
@@ -1,6 +1,7 @@
assertTrue($testdiff_stmt->fetchColumn() === false);
// Cleanup.
- remove_build($buildid);
- remove_build($buildid2);
+ DatabaseCleanupUtils::removeBuild($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid2);
}
public function testFilterBazelJSON()
@@ -130,7 +131,7 @@ public function testFilterBazelJSON()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
$project->Delete();
}
@@ -297,7 +298,7 @@ public function testBazelTestFailed()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testBazelTimeout()
@@ -353,7 +354,7 @@ public function testBazelTimeout()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testBazelConfigure()
@@ -389,7 +390,7 @@ public function testBazelConfigure()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testBazelDuplicateTests()
@@ -425,7 +426,7 @@ public function testBazelDuplicateTests()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testMultipleLineError()
@@ -470,7 +471,7 @@ public function testMultipleLineError()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testShardTest()
@@ -526,7 +527,7 @@ public function testShardTest()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testShardTestFailures()
@@ -622,7 +623,7 @@ public function testShardTestFailures()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
public function testShardTestTimeout()
@@ -709,7 +710,7 @@ public function testShardTestTimeout()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
private function submit_data($project_name, $upload_type, $md5, $file_path,
diff --git a/app/cdash/tests/test_branchcoverage.php b/app/cdash/tests/test_branchcoverage.php
index 7e62ba47f0..7df6b563bb 100644
--- a/app/cdash/tests/test_branchcoverage.php
+++ b/app/cdash/tests/test_branchcoverage.php
@@ -5,8 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
-
-
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Build;
use CDash\Model\PendingSubmissions;
use Illuminate\Support\Facades\DB;
@@ -35,7 +34,7 @@ protected function clearPriorBranchCoverageResults()
SELECT id FROM build WHERE name = 'branch_coverage'");
$existing_buildid = $stmt->fetchColumn();
if ($existing_buildid !== false) {
- remove_build($existing_buildid);
+ DatabaseCleanupUtils::removeBuild((int) $existing_buildid);
}
$files = Storage::allFiles('inbox');
diff --git a/app/cdash/tests/test_buildconfigure.php b/app/cdash/tests/test_buildconfigure.php
index 50e3842d72..f472a4d775 100644
--- a/app/cdash/tests/test_buildconfigure.php
+++ b/app/cdash/tests/test_buildconfigure.php
@@ -5,9 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
-
-
-
+use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
use CDash\Model\Build;
use CDash\Model\BuildConfigure;
@@ -90,7 +88,7 @@ public function testBuildConfigureDiff()
"SELECT id FROM build WHERE name = 'configure_warning_diff'");
$this->PDO->execute($stmt);
while ($row = $stmt->fetch()) {
- remove_build($row['id']);
+ DatabaseCleanupUtils::removeBuild($row['id']);
}
// Make two consecutive builds.
diff --git a/app/cdash/tests/test_builddetails.php b/app/cdash/tests/test_builddetails.php
index 3fafd1cb91..d6a2a41226 100644
--- a/app/cdash/tests/test_builddetails.php
+++ b/app/cdash/tests/test_builddetails.php
@@ -3,6 +3,7 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -41,7 +42,7 @@ public function __construct()
public function __destruct()
{
foreach ($this->builds as $build) {
- remove_build($build['id']);
+ DatabaseCleanupUtils::removeBuild($build['id']);
}
}
@@ -125,7 +126,7 @@ public function testViewTestReturnsProperFormat()
$this->assertEqual($actualResponse->numNotRun, $expectedResponse->numNotRun);
$this->assertEqual($actualResponse->numTimeFailed, $expectedResponse->numTimeFailed);
- remove_build($buildId->id);
+ DatabaseCleanupUtils::removeBuild($buildId->id);
}
public function testViewTestReturnsProperFormatForParentBuilds()
@@ -147,6 +148,6 @@ public function testViewTestReturnsProperFormatForParentBuilds()
$this->assertTrue($test->subprojectname == 'some-subproject');
}
- remove_build($buildId->id);
+ DatabaseCleanupUtils::removeBuild($buildId->id);
}
}
diff --git a/app/cdash/tests/test_buildfailuredetails.php b/app/cdash/tests/test_buildfailuredetails.php
index 5a994fce9a..323dd42d54 100644
--- a/app/cdash/tests/test_buildfailuredetails.php
+++ b/app/cdash/tests/test_buildfailuredetails.php
@@ -3,6 +3,7 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -68,7 +69,7 @@ public function testBuildFailureDetails()
}
// Delete one of the builds.
- remove_build($buildids[0]);
+ DatabaseCleanupUtils::removeBuild($buildids[0]);
// Verify 2 buildfailures, 1 build, and 2 details.
$count_results = DB::select($count_query)[0];
@@ -89,7 +90,7 @@ public function testBuildFailureDetails()
}
// Delete the other build.
- remove_build($buildids[1]);
+ DatabaseCleanupUtils::removeBuild($buildids[1]);
// Verify that the rest of our data is now gone.
$count_results = DB::select($count_query)[0];
diff --git a/app/cdash/tests/test_buildgrouprule.php b/app/cdash/tests/test_buildgrouprule.php
index 0af2c03a21..b46a20da42 100644
--- a/app/cdash/tests/test_buildgrouprule.php
+++ b/app/cdash/tests/test_buildgrouprule.php
@@ -6,6 +6,7 @@
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use App\Utils\SubmissionUtils;
use CDash\Database;
use CDash\Model\Build;
@@ -108,7 +109,7 @@ public function testOnlyExpireRulesFromSameProject()
"SELECT id FROM build WHERE name = 'no-project-leakage'");
pdo_execute($stmt);
while ($row = $stmt->fetch()) {
- remove_build($row['id']);
+ DatabaseCleanupUtils::removeBuild($row['id']);
}
DB::delete("DELETE FROM build2grouprule WHERE buildname = 'no-project-leakage'");
diff --git a/app/cdash/tests/test_buildmodel.php b/app/cdash/tests/test_buildmodel.php
index 59143817f9..2814786212 100644
--- a/app/cdash/tests/test_buildmodel.php
+++ b/app/cdash/tests/test_buildmodel.php
@@ -7,7 +7,7 @@
-
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Build;
use CDash\Model\BuildError;
use Illuminate\Support\Facades\DB;
@@ -63,7 +63,7 @@ public function __construct()
public function __destruct()
{
foreach ($this->builds as $build) {
- remove_build($build['id']);
+ DatabaseCleanupUtils::removeBuild($build['id']);
}
}
@@ -322,6 +322,6 @@ public function testBuildModelAddBuild()
$build2 = new Build();
$this->assertFalse($build2->AddBuild());
- remove_build($build->Id);
+ DatabaseCleanupUtils::removeBuild($build->Id);
}
}
diff --git a/app/cdash/tests/test_buildrelationship.php b/app/cdash/tests/test_buildrelationship.php
index 56d94ea822..aad402c142 100644
--- a/app/cdash/tests/test_buildrelationship.php
+++ b/app/cdash/tests/test_buildrelationship.php
@@ -6,6 +6,7 @@
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use App\Utils\SubmissionUtils;
use CDash\Database;
use CDash\Model\Build;
@@ -27,7 +28,7 @@ public function testBuildRelationships()
"SELECT id FROM build WHERE name = 'test-build-relationships'");
pdo_execute($stmt);
while ($row = $stmt->fetch()) {
- remove_build($row['id']);
+ DatabaseCleanupUtils::removeBuild($row['id']);
}
// Login as admin.
diff --git a/app/cdash/tests/test_deferredsubmissions.php b/app/cdash/tests/test_deferredsubmissions.php
index 64c4359077..4a42b6c5ba 100644
--- a/app/cdash/tests/test_deferredsubmissions.php
+++ b/app/cdash/tests/test_deferredsubmissions.php
@@ -9,6 +9,7 @@
use App\Models\AuthToken;
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Project;
class DeferredSubmissionsTestCase extends BranchCoverageTestCase
@@ -86,7 +87,7 @@ private function prepareForNormalSubmission()
->where('name', '=', 'deferred_submission')
->first();
if ($existing_build_row) {
- remove_build($existing_build_row->id);
+ DatabaseCleanupUtils::removeBuild($existing_build_row->id);
}
// Make sure inbox is empty.
diff --git a/app/cdash/tests/test_disabledtests.php b/app/cdash/tests/test_disabledtests.php
index 4aba1a22c1..fa1decdc01 100644
--- a/app/cdash/tests/test_disabledtests.php
+++ b/app/cdash/tests/test_disabledtests.php
@@ -5,6 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
class DisabledTestsTestCase extends KWWebTestCase
@@ -71,6 +72,6 @@ public function testDisabledTests()
$this->fail("Erroneous email sent for test 'ThisTestIsDisabled'");
}
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
}
diff --git a/app/cdash/tests/test_donehandler.php b/app/cdash/tests/test_donehandler.php
index d1c11b1c01..ac3387b0fa 100644
--- a/app/cdash/tests/test_donehandler.php
+++ b/app/cdash/tests/test_donehandler.php
@@ -4,9 +4,10 @@
require_once 'include/ctestparser.php';
+use App\Models\Site;
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Build;
use CDash\Model\PendingSubmissions;
-use App\Models\Site;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Storage;
@@ -106,6 +107,6 @@ private function performTest($remote = false)
$this->assertTrue(strpos($contents, "Done retries=\"5\"") !== false);
unlink($tmpfname);
- remove_build($build->Id);
+ DatabaseCleanupUtils::removeBuild($build->Id);
}
}
diff --git a/app/cdash/tests/test_dynamicanalysissummary.php b/app/cdash/tests/test_dynamicanalysissummary.php
index 020bec6c14..b71c9ed7b7 100644
--- a/app/cdash/tests/test_dynamicanalysissummary.php
+++ b/app/cdash/tests/test_dynamicanalysissummary.php
@@ -15,6 +15,7 @@
=========================================================================*/
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -68,7 +69,7 @@ public function testSubProjectDynamicAnalysisSummary()
public function testDynamicAnalysisSummaryGetsDeleted()
{
// Remove the builds we just created.
- remove_build($this->ParentId);
+ DatabaseCleanupUtils::removeBuild($this->ParentId);
// Verify that the dynamicanalysisssummary rows got deleted.
$result = DB::select("
diff --git a/app/cdash/tests/test_externallinksfromtests.php b/app/cdash/tests/test_externallinksfromtests.php
index 300dccff62..03197ec0aa 100644
--- a/app/cdash/tests/test_externallinksfromtests.php
+++ b/app/cdash/tests/test_externallinksfromtests.php
@@ -3,6 +3,7 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -60,7 +61,7 @@ public function testExternalLinksFromTests()
}
// Delete the build that we created during this test.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
if (!$success) {
$this->fail($error_msg);
diff --git a/app/cdash/tests/test_filterbuilderrors.php b/app/cdash/tests/test_filterbuilderrors.php
index 1f8e9164d8..721790649b 100644
--- a/app/cdash/tests/test_filterbuilderrors.php
+++ b/app/cdash/tests/test_filterbuilderrors.php
@@ -5,6 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
use CDash\Model\Project;
@@ -71,7 +72,7 @@ public function testFilterBuildErrors()
}
// Cleanup.
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
$project->Delete();
}
}
diff --git a/app/cdash/tests/test_filtertestlabels.php b/app/cdash/tests/test_filtertestlabels.php
index cc3aedd67d..9e4570905a 100644
--- a/app/cdash/tests/test_filtertestlabels.php
+++ b/app/cdash/tests/test_filtertestlabels.php
@@ -5,7 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
-
+use App\Utils\DatabaseCleanupUtils;
class FilterTestLabelsTestCase extends KWWebTestCase
{
@@ -41,7 +41,7 @@ public function testFilterLabels()
if (count($buildids) != 1) {
foreach ($buildids as $id) {
- remove_build($id);
+ DatabaseCleanupUtils::removeBuild($id);
}
$this->fail('Expected 1 build, found ' . count($buildids));
return 1;
@@ -88,7 +88,7 @@ public function testFilterLabels()
}
// Delete the build
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
// Turn the option back off.
pdo_query("UPDATE project SET sharelabelfilters=0
diff --git a/app/cdash/tests/test_hidecolumns.php b/app/cdash/tests/test_hidecolumns.php
index abf594db52..3b5a64a5db 100644
--- a/app/cdash/tests/test_hidecolumns.php
+++ b/app/cdash/tests/test_hidecolumns.php
@@ -3,6 +3,7 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -95,7 +96,7 @@ public function onlyColumn($method)
$buildid_results = DB::select(
"SELECT id FROM build WHERE name='HideColumns'")[0];
$buildid = $buildid_results->id;
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
return $retval;
}
}
diff --git a/app/cdash/tests/test_imagecomparison.php b/app/cdash/tests/test_imagecomparison.php
index 71602c3aed..3a81d1e325 100644
--- a/app/cdash/tests/test_imagecomparison.php
+++ b/app/cdash/tests/test_imagecomparison.php
@@ -5,6 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
use CDash\Model\Image;
@@ -54,6 +55,6 @@ public function testImageComparison()
}
}
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
}
diff --git a/app/cdash/tests/test_managemeasurements.php b/app/cdash/tests/test_managemeasurements.php
index 247c57bebc..95b256ebcb 100644
--- a/app/cdash/tests/test_managemeasurements.php
+++ b/app/cdash/tests/test_managemeasurements.php
@@ -7,6 +7,7 @@
require_once dirname(__FILE__) . '/cdash_test_case.php';
use App\Models\Measurement;
+use App\Utils\DatabaseCleanupUtils;
class ManageMeasurementsTestCase extends KWWebTestCase
{
@@ -31,10 +32,10 @@ public function __construct()
public function __destruct()
{
if (!is_null($this->BuildId)) {
- remove_build($this->BuildId);
+ DatabaseCleanupUtils::removeBuild($this->BuildId);
}
if (!is_null($this->SubProjectBuildId)) {
- remove_build($this->SubProjectBuildId);
+ DatabaseCleanupUtils::removeBuild($this->SubProjectBuildId);
}
Measurement::destroy($this->MeasurementIds);
diff --git a/app/cdash/tests/test_multicoverage.php b/app/cdash/tests/test_multicoverage.php
index ecc3266145..a9296dc0f3 100644
--- a/app/cdash/tests/test_multicoverage.php
+++ b/app/cdash/tests/test_multicoverage.php
@@ -5,7 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
-
+use App\Utils\DatabaseCleanupUtils;
class MultiCoverageTestCase extends KWWebTestCase
{
@@ -30,7 +30,7 @@ public function testXMLFirst()
$this->pass("Passed");
}
- remove_build($this->BuildId);
+ DatabaseCleanupUtils::removeBuild($this->BuildId);
return $success;
}
@@ -47,7 +47,7 @@ public function testTarFirst()
$this->pass("Passed");
}
- remove_build($this->BuildId);
+ DatabaseCleanupUtils::removeBuild($this->BuildId);
return $success;
}
diff --git a/app/cdash/tests/test_multiplesubprojects.php b/app/cdash/tests/test_multiplesubprojects.php
index f229eeb7df..9cb752f2eb 100644
--- a/app/cdash/tests/test_multiplesubprojects.php
+++ b/app/cdash/tests/test_multiplesubprojects.php
@@ -5,6 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
class MultipleSubprojectsTestCase extends KWWebTestCase
@@ -122,7 +123,7 @@ private function submitBuild()
if ($total_builds != 5) { // parent + 4 subprojects
foreach ($this->buildIds as $id) {
- remove_build($id);
+ DatabaseCleanupUtils::removeBuild($id);
}
$this->fail("Expected 5 Builds found {$total_builds}");
return 1;
@@ -131,7 +132,7 @@ private function submitBuild()
private function restoreState()
{
- remove_build($this->buildIds);
+ DatabaseCleanupUtils::removeBuild($this->buildIds);
$this->restoreEmailPreference();
diff --git a/app/cdash/tests/test_nobackup.php b/app/cdash/tests/test_nobackup.php
index 9c73419dd2..b288ea4da0 100644
--- a/app/cdash/tests/test_nobackup.php
+++ b/app/cdash/tests/test_nobackup.php
@@ -5,6 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
class NoBackupTestCase extends KWWebTestCase
@@ -86,6 +87,6 @@ public function testNoBackup()
$this->checkLog($this->logfilename);
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild((int) $buildid);
}
}
diff --git a/app/cdash/tests/test_notesparsererrormessages.php b/app/cdash/tests/test_notesparsererrormessages.php
index 8a592b5ca3..6389b9c339 100644
--- a/app/cdash/tests/test_notesparsererrormessages.php
+++ b/app/cdash/tests/test_notesparsererrormessages.php
@@ -38,12 +38,9 @@ public function testNotesParserErrorMessages()
$this->submission('NotesParserErrorMessages', "{$test_dir}/NoName.xml");
$expected = [
- 'about to query for builds to remove',
- 'removing old buildids for projectid:',
- 'removing old buildids for projectid:',
'Note missing name for build',
];
- $this->assertLogContains($expected, 5);
+ $this->assertLogContains($expected, 2);
$this->deleteLog($this->logfilename);
$this->submission('NotesParserErrorMessages', "{$test_dir}/NoText.xml");
diff --git a/app/cdash/tests/test_opencovercoverage.php b/app/cdash/tests/test_opencovercoverage.php
index 123c25e06a..d14d1a5e26 100644
--- a/app/cdash/tests/test_opencovercoverage.php
+++ b/app/cdash/tests/test_opencovercoverage.php
@@ -5,7 +5,7 @@
//
require_once(dirname(__FILE__).'/cdash_test_case.php');
-
+use App\Utils\DatabaseCleanupUtils;
class OpenCoverCoverageTestCase extends KWWebTestCase
{
@@ -17,7 +17,7 @@ public function __construct()
}
public function tearDown()
{
- remove_build($this->buildId);
+ DatabaseCleanupUtils::removeBuild($this->buildId);
}
public function testOpenCoverCoverage()
{
diff --git a/app/cdash/tests/test_parallelsubmissions.php b/app/cdash/tests/test_parallelsubmissions.php
index f273bfebf0..e87639ebdb 100644
--- a/app/cdash/tests/test_parallelsubmissions.php
+++ b/app/cdash/tests/test_parallelsubmissions.php
@@ -8,7 +8,7 @@
require_once 'tests/trilinos_submission_test.php';
-
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Project;
class ParallelSubmissionsTestCase extends TrilinosSubmissionTestCase
@@ -47,7 +47,7 @@ public function testParallelSubmissions()
->whereBetween('starttime', ['2011-07-22 00:00:00', '2011-07-22 23:59:59'])
->first();
if ($trilinos_build_row) {
- remove_build($trilinos_build_row->id);
+ DatabaseCleanupUtils::removeBuild($trilinos_build_row->id);
}
// Change CDash config to queue submissions in the database.
diff --git a/app/cdash/tests/test_removebuilds.php b/app/cdash/tests/test_removebuilds.php
index 83a5f74d59..33b4138f20 100644
--- a/app/cdash/tests/test_removebuilds.php
+++ b/app/cdash/tests/test_removebuilds.php
@@ -6,6 +6,7 @@
require_once dirname(__FILE__) . '/cdash_test_case.php';
use App\Models\TestMeasurement;
+use App\Utils\DatabaseCleanupUtils;
use App\Utils\TestCreator;
use App\Utils\NoteCreator;
@@ -26,6 +27,7 @@
use CDash\Model\Image;
use CDash\Model\Label;
use CDash\Model\UploadFile;
+use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
class RemoveBuildsTestCase extends KWWebTestCase
@@ -429,7 +431,8 @@ public function testBuildRemovalWorksAsExpected()
return;
// Remove the build.
- remove_build($build->Id);
+ DatabaseCleanupUtils::removeBuild($build->Id);
+ Artisan::call('db:cleanup');
// Check that everything was deleted properly.
$this->verify('build', 'id', '=', $build->Id, 0, true);
diff --git a/app/cdash/tests/test_replacebuild.php b/app/cdash/tests/test_replacebuild.php
index b79810916e..798e0afabd 100644
--- a/app/cdash/tests/test_replacebuild.php
+++ b/app/cdash/tests/test_replacebuild.php
@@ -3,6 +3,7 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -62,7 +63,7 @@ public function testReplaceBuild()
$error_msg = "Expected 0 rows, found $num_rows";
echo "$error_msg\n";
$success = false;
- remove_build($first_buildid);
+ DatabaseCleanupUtils::removeBuild($first_buildid);
}
// Verify the replacement build.
@@ -76,7 +77,7 @@ public function testReplaceBuild()
}
// Delete the build that we created during this test.
- remove_build($second_buildid);
+ DatabaseCleanupUtils::removeBuild($second_buildid);
if ($success) {
$this->pass('Test passed');
diff --git a/app/cdash/tests/test_submission_assign_buildid.php b/app/cdash/tests/test_submission_assign_buildid.php
index d92e9e000a..32de80684c 100644
--- a/app/cdash/tests/test_submission_assign_buildid.php
+++ b/app/cdash/tests/test_submission_assign_buildid.php
@@ -2,6 +2,7 @@
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Build;
class SubmissionAssignBuildIdTestCase extends KWWebTestCase
@@ -37,6 +38,6 @@ public function testSubmissionAssignBuildId()
$this->assertEqual('gcc', $build->CompilerName);
$this->assertEqual('5.5.0', $build->CompilerVersion);
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
}
diff --git a/app/cdash/tests/test_subprojectnextprevious.php b/app/cdash/tests/test_subprojectnextprevious.php
index 528cb29066..b1ba02b68a 100644
--- a/app/cdash/tests/test_subprojectnextprevious.php
+++ b/app/cdash/tests/test_subprojectnextprevious.php
@@ -3,6 +3,7 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__) . '/cdash_test_case.php';
@@ -323,8 +324,8 @@ public function testSubProjectNextPrevious()
}
// Delete the builds that we created during this test.
- remove_build($second_parentid);
- remove_build($third_parentid);
+ DatabaseCleanupUtils::removeBuild($second_parentid);
+ DatabaseCleanupUtils::removeBuild($third_parentid);
if (!$success) {
$this->fail($error_msg);
diff --git a/app/cdash/tests/test_summaryemail.php b/app/cdash/tests/test_summaryemail.php
index 746056f48c..6dfb9df67c 100644
--- a/app/cdash/tests/test_summaryemail.php
+++ b/app/cdash/tests/test_summaryemail.php
@@ -43,9 +43,6 @@ public function testSummaryEmail()
}
$expected = [
- 'about to query for builds to remove',
- 'removing old buildids for projectid:',
- 'removing old buildids for projectid:',
'simpletest@localhost',
'FAILED (w=3): SummaryEmailProject - Win32-MSVC2009 - Nightly',
'The "Nightly" group has errors, warnings, or test failures.',
@@ -65,7 +62,7 @@ public function testSummaryEmail()
'3>f:\program files\microsoft sdks\windows\v6.0a\include\servprov.h(79) : warning C4068: unknown pragma',
'-CDash on',
];
- if (!$this->assertLogContains($expected, 28)) {
+ if (!$this->assertLogContains($expected, 25)) {
$this->fail('Log did not contain expected contents');
}
}
diff --git a/app/cdash/tests/test_truncateoutput.php b/app/cdash/tests/test_truncateoutput.php
index a1306f6ec8..d0f329f9cf 100644
--- a/app/cdash/tests/test_truncateoutput.php
+++ b/app/cdash/tests/test_truncateoutput.php
@@ -3,6 +3,8 @@
// After including cdash_test_case.php, subsequent require_once calls are
// relative to the top of the CDash source tree
//
+use App\Utils\DatabaseCleanupUtils;
+use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
require_once dirname(__FILE__).'/cdash_test_case.php';
@@ -102,7 +104,8 @@ public function testTruncateOutput()
private function removeBuild()
{
if ($this->BuildId > 0) {
- remove_build($this->BuildId);
+ DatabaseCleanupUtils::removeBuild($this->BuildId);
+ Artisan::call('db:cleanup');
$this->BuildId = 0;
}
}
diff --git a/app/cdash/tests/test_unparsedsubmissionshonorbuildid.php b/app/cdash/tests/test_unparsedsubmissionshonorbuildid.php
index b0b2f412d7..bfaa848b35 100644
--- a/app/cdash/tests/test_unparsedsubmissionshonorbuildid.php
+++ b/app/cdash/tests/test_unparsedsubmissionshonorbuildid.php
@@ -6,6 +6,8 @@
require_once dirname(__FILE__) . '/cdash_test_case.php';
require_once 'tests/test_branchcoverage.php';
+use App\Utils\DatabaseCleanupUtils;
+
class UnparsedSubmissionsHonorBuildIdTestCase extends BranchCoverageTestCase
{
protected $projectname;
@@ -38,6 +40,6 @@ public function testBranchCoverage(): void
$this->verifyResults();
DB::delete("DELETE FROM buildfile WHERE buildid='{$old_buildid}'");
- remove_build($old_buildid);
+ DatabaseCleanupUtils::removeBuild($old_buildid);
}
}
diff --git a/app/cdash/tests/test_updateappend.php b/app/cdash/tests/test_updateappend.php
index 0942d503d3..f4cf07a97e 100644
--- a/app/cdash/tests/test_updateappend.php
+++ b/app/cdash/tests/test_updateappend.php
@@ -5,7 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
-
+use App\Utils\DatabaseCleanupUtils;
class UppdateAppendTestCase extends KWWebTestCase
{
@@ -46,7 +46,7 @@ public function testUpdateAppend()
if (count($buildids) != 1) {
foreach ($buildids as $id) {
- remove_build($id);
+ DatabaseCleanupUtils::removeBuild($id);
}
$this->fail('Expected 1 build, found ' . count($buildids));
return 1;
@@ -114,7 +114,7 @@ public function testUpdateAppend()
}
// Delete the build
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
if ($success) {
$this->pass('Test passed');
diff --git a/app/cdash/tests/test_updateonlyuserstats.php b/app/cdash/tests/test_updateonlyuserstats.php
index ef6b6f21c8..6c53b9b535 100644
--- a/app/cdash/tests/test_updateonlyuserstats.php
+++ b/app/cdash/tests/test_updateonlyuserstats.php
@@ -17,6 +17,7 @@
use CDash\Database;
use App\Models\User;
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\UserProject;
class UpdateOnlyUserStatsTestCase extends KWWebTestCase
@@ -162,7 +163,7 @@ public function testCleanup()
"SELECT id FROM build WHERE name='GithubUserStats'");
$stmt->execute();
while ($row = $stmt->fetch()) {
- remove_build($row['id']);
+ DatabaseCleanupUtils::removeBuild($row['id']);
}
// Delete project.
diff --git a/app/cdash/tests/test_upgrade.php b/app/cdash/tests/test_upgrade.php
index a697b37266..eb65ebb246 100644
--- a/app/cdash/tests/test_upgrade.php
+++ b/app/cdash/tests/test_upgrade.php
@@ -36,20 +36,6 @@ public function testFixBuildGroups()
}
}
- public function testCheckAndDeleteBuildsWrongDate()
- {
- if (!$this->getMaintenancePage()) {
- return 1;
- }
- if (!$this->clickSubmitByName('CheckBuildsWrongDate')) {
- $this->fail('clicking CheckBuildsWrongDate returned false');
- }
- if (!$this->clickSubmitByName('DeleteBuildsWrongDate')) {
- $this->fail('clicking DeleteBuildsWrongDate returned false');
- }
- $this->pass('Passed');
- }
-
public function testComputeTestTiming()
{
if (!$this->getMaintenancePage()) {
@@ -76,18 +62,6 @@ function testComputeUpdateStatistics()
}
*/
- public function testCleanup()
- {
- if (!$this->getMaintenancePage()) {
- return 1;
- }
- set_time_limit(0);
- if (!$this->clickSubmitByName('Cleanup')) {
- $this->fail('clicking Cleanup returned false');
- }
- $this->assertText('Database cleanup complete.');
- }
-
public function getMaintenancePage()
{
$this->login();
diff --git a/app/cdash/tests/test_viewdynamicanalysisfile.php b/app/cdash/tests/test_viewdynamicanalysisfile.php
index 1834a7f525..3a84e90157 100644
--- a/app/cdash/tests/test_viewdynamicanalysisfile.php
+++ b/app/cdash/tests/test_viewdynamicanalysisfile.php
@@ -5,6 +5,7 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';
+use App\Utils\DatabaseCleanupUtils;
use CDash\Model\Build;
use CDash\Model\DynamicAnalysis;
use CDash\Database;
@@ -86,7 +87,7 @@ public function testNextPrevious()
pdo_execute($stmt, [$id_to_delete]);
$row = $stmt->fetch();
$buildid = $row['buildid'];
- remove_build($buildid);
+ DatabaseCleanupUtils::removeBuild($buildid);
}
}
}
diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh
index 04e357394d..66d69fd446 100755
--- a/docker/docker-entrypoint.sh
+++ b/docker/docker-entrypoint.sh
@@ -38,7 +38,7 @@ if [ "$1" = "start-website" ] ; then
# If the start-worker argument was provided, start a worker process instead
elif [ "$1" = "start-worker" ] ; then
- php -d memory_limit=-1 artisan queue:work
+ php -d memory_limit=-1 artisan queue:work --queue=default,low
# Otherwise, throw an error...
else
diff --git a/docs/submissions.md b/docs/submissions.md
index 5e13c753a7..20794498a8 100644
--- a/docs/submissions.md
+++ b/docs/submissions.md
@@ -40,7 +40,7 @@ User=www-data
WorkingDirectory=/var/www/CDash
Restart=always
RestartSec=5s
-ExecStart=/usr/bin/php artisan queue:work --max-time=3600
+ExecStart=/usr/bin/php artisan queue:work --max-time=3600 --queue=default,low
[Install]
WantedBy=multi-user.target
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
index 1f9b2963bf..cd71efe0dd 100644
--- a/phpstan-baseline.neon
+++ b/phpstan-baseline.neon
@@ -301,7 +301,7 @@ parameters:
#^Call to deprecated function pdo_error\\(\\)\\:
04/01/2023$#
"""
- count: 7
+ count: 6
path: app/Http/Controllers/AdminController.php
-
@@ -309,7 +309,7 @@ parameters:
#^Call to deprecated function pdo_fetch_array\\(\\)\\:
04/01/2023$#
"""
- count: 12
+ count: 10
path: app/Http/Controllers/AdminController.php
-
@@ -317,7 +317,7 @@ parameters:
#^Call to deprecated function pdo_query\\(\\)\\:
04/01/2023$#
"""
- count: 14
+ count: 12
path: app/Http/Controllers/AdminController.php
-
@@ -410,26 +410,6 @@ parameters:
count: 1
path: app/Http/Controllers/AdminController.php
- -
- message: "#^Method App\\\\Http\\\\Controllers\\\\AdminController\\:\\:delete_unused_rows\\(\\) has parameter \\$field with no type specified\\.$#"
- count: 1
- path: app/Http/Controllers/AdminController.php
-
- -
- message: "#^Method App\\\\Http\\\\Controllers\\\\AdminController\\:\\:delete_unused_rows\\(\\) has parameter \\$selectfield with no type specified\\.$#"
- count: 1
- path: app/Http/Controllers/AdminController.php
-
- -
- message: "#^Method App\\\\Http\\\\Controllers\\\\AdminController\\:\\:delete_unused_rows\\(\\) has parameter \\$table with no type specified\\.$#"
- count: 1
- path: app/Http/Controllers/AdminController.php
-
- -
- message: "#^Method App\\\\Http\\\\Controllers\\\\AdminController\\:\\:delete_unused_rows\\(\\) has parameter \\$targettable with no type specified\\.$#"
- count: 1
- path: app/Http/Controllers/AdminController.php
-
-
message: "#^Method App\\\\Http\\\\Controllers\\\\AdminController\\:\\:removeBuilds\\(\\) never returns Illuminate\\\\Http\\\\RedirectResponse so it can be removed from the return type\\.$#"
count: 1
@@ -447,7 +427,7 @@ parameters:
-
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
- count: 9
+ count: 6
path: app/Http/Controllers/AdminController.php
-
@@ -3943,6 +3923,16 @@ parameters:
count: 1
path: app/Utils/AuthTokenUtil.php
+ -
+ message: "#^Argument of an invalid type array\\\\|int supplied for foreach, only iterables are supported\\.$#"
+ count: 1
+ path: app/Utils/DatabaseCleanupUtils.php
+
+ -
+ message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
+ count: 1
+ path: app/Utils/DatabaseCleanupUtils.php
+
-
message: "#^Dynamic call to static method Illuminate\\\\Database\\\\Eloquent\\\\Builder\\\\:\\:limit\\(\\)\\.$#"
count: 1
@@ -3953,6 +3943,11 @@ parameters:
count: 1
path: app/Utils/DatabaseCleanupUtils.php
+ -
+ message: "#^Parameter \\#1 \\$buildids of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuildChunked\\(\\) expects array\\\\|int, array given\\.$#"
+ count: 1
+ path: app/Utils/DatabaseCleanupUtils.php
+
-
message: """
#^Call to deprecated function pdo_real_escape_string\\(\\)\\:
@@ -13885,14 +13880,6 @@ parameters:
count: 1
path: app/cdash/include/common.php
- -
- message: """
- #^Call to deprecated function add_last_sql_error\\(\\)\\:
- 04/22/2023$#
- """
- count: 1
- path: app/cdash/include/common.php
-
-
message: """
#^Call to deprecated function add_log\\(\\)\\:
@@ -14030,7 +14017,7 @@ parameters:
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
- count: 5
+ count: 2
path: app/cdash/include/common.php
-
@@ -14118,11 +14105,6 @@ parameters:
count: 1
path: app/cdash/include/common.php
- -
- message: "#^Function delete_rows_chunked\\(\\) has parameter \\$ids with no value type specified in iterable type array\\.$#"
- count: 1
- path: app/cdash/include/common.php
-
-
message: "#^Function generate_XSLT\\(\\) has parameter \\$xml with no type specified\\.$#"
count: 1
@@ -14263,21 +14245,6 @@ parameters:
count: 1
path: app/cdash/include/common.php
- -
- message: "#^Function remove_build\\(\\) has no return type specified\\.$#"
- count: 1
- path: app/cdash/include/common.php
-
- -
- message: "#^Function remove_build\\(\\) has parameter \\$buildid with no type specified\\.$#"
- count: 1
- path: app/cdash/include/common.php
-
- -
- message: "#^Function remove_build_chunked\\(\\) has parameter \\$buildid with no type specified\\.$#"
- count: 1
- path: app/cdash/include/common.php
-
-
message: "#^Function remove_project_builds\\(\\) has parameter \\$projectid with no type specified\\.$#"
count: 1
@@ -21384,93 +21351,6 @@ parameters:
count: 3
path: app/cdash/tests/test_autoremovebuilds.php
- -
- message: """
- #^Call to deprecated function pdo_fetch_array\\(\\)\\:
- 04/01/2023$#
- """
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: """
- #^Call to deprecated method execute\\(\\) of class CDash\\\\Database\\:
- 04/22/2023 Use Laravel query builder or Eloquent instead$#
- """
- count: 4
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Call to deprecated method pass\\(\\) of class SimpleTestCase\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: """
- #^Call to deprecated method prepare\\(\\) of class CDash\\\\Database\\:
- 04/22/2023 Use Laravel query builder or Eloquent instead$#
- """
- count: 6
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: """
- #^Call to deprecated method query\\(\\) of class CDash\\\\Database\\:
- 04/22/2023 Use Laravel query builder or Eloquent instead$#
- """
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Cannot access offset 0 on array\\|false\\|null\\.$#"
- count: 2
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Cannot call method fetchColumn\\(\\) on PDOStatement\\|false\\.$#"
- count: 4
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Loose comparison via \"\\!\\=\" is not allowed\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Method AutoRemoveBuildsOnSubmitTestCase\\:\\:enableAutoRemoveConfigSetting\\(\\) has no return type specified\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Method AutoRemoveBuildsOnSubmitTestCase\\:\\:setAutoRemoveTimeFrame\\(\\) has no return type specified\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Method AutoRemoveBuildsOnSubmitTestCase\\:\\:testBuildsRemovedOnSubmission\\(\\) has no return type specified\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Only booleans are allowed in an if condition, int\\|string\\|false\\|null given\\.$#"
- count: 2
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Parameter \\#1 \\$stmt of method CDash\\\\Database\\:\\:execute\\(\\) expects PDOStatement, PDOStatement\\|false given\\.$#"
- count: 4
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Parameter \\#1 \\$time of method CDash\\\\Model\\\\BuildGroup\\:\\:SetEndTime\\(\\) expects Illuminate\\\\Support\\\\Carbon, Illuminate\\\\Support\\\\Carbon\\|false given\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
- -
- message: "#^Property AutoRemoveBuildsOnSubmitTestCase\\:\\:\\$config_file has no type specified\\.$#"
- count: 1
- path: app/cdash/tests/test_autoremovebuilds_on_submit.php
-
-
message: "#^Binary operation \"\\.\" between 'Expected error at…' and mixed results in an error\\.$#"
count: 1
@@ -21816,6 +21696,11 @@ parameters:
count: 1
path: app/cdash/tests/test_buildconfigure.php
+ -
+ message: "#^Parameter \\#1 \\$buildid of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuild\\(\\) expects array\\\\|int, mixed given\\.$#"
+ count: 1
+ path: app/cdash/tests/test_buildconfigure.php
+
-
message: "#^Parameter \\#1 \\$haystack of function strpos expects string, string\\|false given\\.$#"
count: 2
@@ -23326,6 +23211,11 @@ parameters:
count: 1
path: app/cdash/tests/test_disabledtests.php
+ -
+ message: "#^Parameter \\#1 \\$buildid of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuild\\(\\) expects array\\\\|int, mixed given\\.$#"
+ count: 1
+ path: app/cdash/tests/test_disabledtests.php
+
-
message: "#^Parameter \\#1 \\$haystack of function strpos expects string, string\\|false given\\.$#"
count: 2
@@ -24402,6 +24292,11 @@ parameters:
count: 1
path: app/cdash/tests/test_imagecomparison.php
+ -
+ message: "#^Parameter \\#1 \\$buildid of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuild\\(\\) expects array\\\\|int, mixed given\\.$#"
+ count: 1
+ path: app/cdash/tests/test_imagecomparison.php
+
-
message: "#^Part \\$imgid \\(mixed\\) of encapsed string cannot be cast to string\\.$#"
count: 1
@@ -25661,6 +25556,11 @@ parameters:
count: 7
path: app/cdash/tests/test_multiplesubprojects.php
+ -
+ message: "#^Parameter \\#1 \\$buildid of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuild\\(\\) expects array\\\\|int, mixed given\\.$#"
+ count: 1
+ path: app/cdash/tests/test_multiplesubprojects.php
+
-
message: "#^Parameter \\#1 \\$haystack of function strpos expects string, int\\|string\\|false\\|null given\\.$#"
count: 1
@@ -28562,6 +28462,11 @@ parameters:
count: 1
path: app/cdash/tests/test_updateonlyuserstats.php
+ -
+ message: "#^Parameter \\#1 \\$buildid of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuild\\(\\) expects array\\\\|int, mixed given\\.$#"
+ count: 1
+ path: app/cdash/tests/test_updateonlyuserstats.php
+
-
message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#"
count: 1
@@ -28599,7 +28504,7 @@ parameters:
-
message: "#^Call to deprecated method pass\\(\\) of class SimpleTestCase\\.$#"
- count: 2
+ count: 1
path: app/cdash/tests/test_upgrade.php
-
@@ -28617,16 +28522,6 @@ parameters:
count: 1
path: app/cdash/tests/test_upgrade.php
- -
- message: "#^Method UpgradeTestCase\\:\\:testCheckAndDeleteBuildsWrongDate\\(\\) has no return type specified\\.$#"
- count: 1
- path: app/cdash/tests/test_upgrade.php
-
- -
- message: "#^Method UpgradeTestCase\\:\\:testCleanup\\(\\) has no return type specified\\.$#"
- count: 1
- path: app/cdash/tests/test_upgrade.php
-
-
message: "#^Method UpgradeTestCase\\:\\:testComputeTestTiming\\(\\) has no return type specified\\.$#"
count: 1
@@ -28783,6 +28678,11 @@ parameters:
count: 1
path: app/cdash/tests/test_viewdynamicanalysisfile.php
+ -
+ message: "#^Parameter \\#1 \\$buildid of static method App\\\\Utils\\\\DatabaseCleanupUtils\\:\\:removeBuild\\(\\) expects array\\\\|int, mixed given\\.$#"
+ count: 1
+ path: app/cdash/tests/test_viewdynamicanalysisfile.php
+
-
message: "#^Parameter \\#1 \\$object_or_class of function property_exists expects object\\|string, mixed given\\.$#"
count: 1