feat(install): Add --oneshot option to upgrade

скрутка на зиму (на когда установщик будет чтобы можно было аяксом теребить обновление БД в браузере без 504)
This commit is contained in:
celestora 2025-02-22 20:24:31 +02:00
parent 52f5ed4208
commit b5b4853891

View file

@ -44,6 +44,8 @@ class UpgradeCommand extends Command {
"Don't display warning before migrating database", false) "Don't display warning before migrating database", false)
->addOption("repair", "R", InputOption::VALUE_NEGATABLE, ->addOption("repair", "R", InputOption::VALUE_NEGATABLE,
"Attempt to repair database schema if tables are missing", false) "Attempt to repair database schema if tables are missing", false)
->addOption("oneshot", "O", InputOption::VALUE_NONE,
"Only execute one operation")
->addArgument("chandler", InputArgument::OPTIONAL, ->addArgument("chandler", InputArgument::OPTIONAL,
"Location of Chandler installation"); "Location of Chandler installation");
} }
@ -160,7 +162,7 @@ class UpgradeCommand extends Command {
return $this->executeSqlScript(31, $installFile, $io); return $this->executeSqlScript(31, $installFile, $io);
} }
protected function runMigrations(SymfonyStyle $io): int protected function runMigrations(SymfonyStyle $io, bool $oneshot): int
{ {
$nextLevel = $this->getNextLevel(); $nextLevel = $this->getNextLevel();
$migrations = array_filter($this->getMigrationFiles(), fn ($id) => $id >= $nextLevel, ARRAY_FILTER_USE_KEY); $migrations = array_filter($this->getMigrationFiles(), fn ($id) => $id >= $nextLevel, ARRAY_FILTER_USE_KEY);
@ -186,6 +188,9 @@ class UpgradeCommand extends Command {
$t = time(); $t = time();
$this->db->query("INSERT INTO ovk_upgrade_history VALUES ($num, $t, \"$uname\");"); $this->db->query("INSERT INTO ovk_upgrade_history VALUES ($num, $t, \"$uname\");");
if ($oneshot)
return 5;
} }
return 0; return 0;
@ -193,6 +198,7 @@ class UpgradeCommand extends Command {
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
$oneShotMode = $input->getOption("oneshot");
$io = new SymfonyStyle($input, $output); $io = new SymfonyStyle($input, $output);
if (!$input->getOption("quick")) { if (!$input->getOption("quick")) {
@ -208,7 +214,7 @@ class UpgradeCommand extends Command {
$this->checkDatabaseReadiness($chandlerOk, $ovkOk, $migrationsOk); $this->checkDatabaseReadiness($chandlerOk, $ovkOk, $migrationsOk);
$res = 0; $res = -1;
if ($chandlerOk === null) { if ($chandlerOk === null) {
$io->writeln("Chandler schema not detected, attempting to install..."); $io->writeln("Chandler schema not detected, attempting to install...");
@ -228,12 +234,16 @@ class UpgradeCommand extends Command {
if ($res > 0) if ($res > 0)
return $res; return $res;
else if ($res == 0 && $oneShotMode)
return 5;
if (!$ovkOk) { if (!$ovkOk) {
$io->writeln("Initializing OpenVK schema..."); $io->writeln("Initializing OpenVK schema...");
$res = $this->initSchema($io); $res = $this->initSchema($io);
if ($res > 0) if ($res > 0)
return $res; return $res;
else if ($oneShotMode)
return 5;
} }
if (!$migrationsOk) { if (!$migrationsOk) {
@ -241,10 +251,12 @@ class UpgradeCommand extends Command {
$res = $this->initUpgradeLog($io); $res = $this->initUpgradeLog($io);
if ($res > 0) if ($res > 0)
return $res; return $res;
else if ($oneShotMode)
return 5;
} }
$io->writeln("Upgrading database..."); $io->writeln("Upgrading database...");
$res = $this->runMigrations($io); $res = $this->runMigrations($io, $oneShotMode);
if (!$res) { if (!$res) {
$io->success("Database has been upgraded!"); $io->success("Database has been upgraded!");