From fba906e34a35ab31a334421edacdd7d4d29b1d7f Mon Sep 17 00:00:00 2001 From: Lee Garrett Date: Thu, 22 Dec 2022 22:03:21 +0100 Subject: [PATCH] Implement occ status command via return codes (Fixes: #35704) Running `./occ status -e` will produce any output. However, it will: exit 0 during normal operation, exit 1 when in maintenance mode, exit 2 when `./occ upgrade` is needed. Signed-off-by: Lee Garrett --- core/Command/Status.php | 23 ++++++++++++++++++++--- lib/private/Console/Application.php | 3 ++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/core/Command/Status.php b/core/Command/Status.php index 45ccb28f5c4..9b3af59b94a 100644 --- a/core/Command/Status.php +++ b/core/Command/Status.php @@ -29,6 +29,7 @@ use OCP\Defaults; 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,17 +48,33 @@ class Status extends Base { $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')) { + if ($maintenanceMode === true) { + return 1; + } elseif ($needUpgrade == true) { + return 2; + } else { + return 0; + } + } $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() ]; diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php index fc48f57e499..2b48f9f5ada 100644 --- a/lib/private/Console/Application.php +++ b/lib/private/Console/Application.php @@ -181,7 +181,8 @@ class Application { 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 . -- 2.39.5