diff --git a/core/Command/Status.php b/core/Command/Status.php index 45ccb28f5c499..139c7cfa3596a 100644 --- a/core/Command/Status.php +++ b/core/Command/Status.php @@ -29,6 +29,7 @@ use OCP\IConfig; use OCP\Util; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class Status extends Base { @@ -47,22 +48,45 @@ protected function configure() { $this ->setDescription('show some status information') - ; + ->addOption( + 'exit-code', + 'e', + InputOption::VALUE_NONE, + 'exit with 0 if running in normal mode, 1 when in maintenance mode, 2 when `./occ upgrade` is needed. Does not write any output to STDOUT.' + ); } protected function execute(InputInterface $input, OutputInterface $output): int { + + $maintenanceMode = $this->config->getSystemValueBool('maintenance', false); + $needUpgrade = Util::needUpgrade(); + + if ($input->getOption('exit-code')) { + + # check maintenance mode first + if ($maintenanceMode === true) { + return 1; + + # check DB upgrade next + } elseif ($needUpgrade == true) { + return 2; + } else { + return 0; + } + } else { $values = [ 'installed' => $this->config->getSystemValueBool('installed', false), 'version' => implode('.', Util::getVersion()), 'versionstring' => OC_Util::getVersionString(), 'edition' => '', - 'maintenance' => $this->config->getSystemValueBool('maintenance', false), - 'needsDbUpgrade' => Util::needUpgrade(), + 'maintenance' => $maintenanceMode, + 'needsDbUpgrade' => $needUpgrade, 'productname' => $this->themingDefaults->getProductName(), 'extendedSupport' => Util::hasExtendedSupport() ]; $this->writeArrayInOutputFormat($input, $output, $values); + } return 0; } } diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php index fc48f57e4995d..a12ae74a072ee 100644 --- a/lib/private/Console/Application.php +++ b/lib/private/Console/Application.php @@ -181,7 +181,8 @@ private function writeMaintenanceModeInfo( InputInterface $input, ConsoleOutputInterface $output ) { if ($input->getArgument('command') !== '_completion' - && $input->getArgument('command') !== 'maintenance:mode') { + && $input->getArgument('command') !== 'maintenance:mode' + && $input->getArgument('command') !== 'status' ) { $errOutput = $output->getErrorOutput(); $errOutput->writeln( 'Nextcloud is in maintenance mode, hence the database isn\'t accessible.' . PHP_EOL .