2013-08-02 09:36:54 -04:00
< ? php
2024-03-06 06:17:13 -05:00
declare ( strict_types = 1 );
2013-08-02 09:36:54 -04:00
/**
2024-05-10 09:09:14 -04:00
* SPDX - FileCopyrightText : 2016 - 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX - FileCopyrightText : 2016 ownCloud , Inc .
* SPDX - License - Identifier : AGPL - 3.0 - only
2013-08-02 09:36:54 -04:00
*/
2017-10-13 15:30:29 -04:00
require_once __DIR__ . '/lib/versioncheck.php' ;
2015-04-08 04:53:03 -04:00
use OC\Console\Application ;
2024-06-27 06:26:53 -04:00
use OCP\AppFramework\Http\Response ;
use OCP\Diagnostics\IEventLogger ;
use OCP\IRequest ;
use OCP\Profiler\IProfiler ;
2016-02-17 18:42:00 -05:00
use Symfony\Component\Console\Input\ArgvInput ;
2015-04-08 04:53:03 -04:00
use Symfony\Component\Console\Output\ConsoleOutput ;
2013-09-01 10:40:50 -04:00
2015-02-21 14:52:32 -05:00
define ( 'OC_CONSOLE' , 1 );
2016-04-18 16:30:01 -04:00
function exceptionHandler ( $exception ) {
echo " An unhandled exception has been thrown: " . PHP_EOL ;
echo $exception ;
exit ( 1 );
}
2014-05-19 09:26:57 -04:00
try {
2016-10-06 06:13:02 -04:00
require_once __DIR__ . '/lib/base.php' ;
2013-08-02 09:36:54 -04:00
2015-02-16 03:16:32 -05:00
// set to run indefinitely if needed
2017-03-11 11:04:21 -05:00
if ( strpos ( @ ini_get ( 'disable_functions' ), 'set_time_limit' ) === false ) {
@ set_time_limit ( 0 );
}
2015-02-16 03:16:32 -05:00
2014-05-19 09:26:57 -04:00
if ( ! OC :: $CLI ) {
echo " This script can be run from the command line only " . PHP_EOL ;
2016-10-13 09:45:43 -04:00
exit ( 1 );
2014-05-19 09:26:57 -04:00
}
2013-08-02 15:23:50 -04:00
2024-03-06 06:17:13 -05:00
$config = \OCP\Server :: get ( \OCP\IConfig :: class );
2024-02-28 09:53:36 -05:00
set_exception_handler ( 'exceptionHandler' );
2021-06-22 14:25:14 -04:00
2016-07-08 09:55:17 -04:00
if ( ! function_exists ( 'posix_getuid' )) {
2020-09-17 11:23:07 -04:00
echo " The posix extensions are required - see https://www.php.net/manual/en/book.posix.php " . PHP_EOL ;
2016-10-13 09:45:43 -04:00
exit ( 1 );
2016-07-08 09:55:17 -04:00
}
2024-02-28 09:53:36 -05:00
2024-05-14 06:09:15 -04:00
$user = posix_getuid ();
$configUser = fileowner ( OC :: $configDir . 'config.php' );
if ( $user !== $configUser ) {
echo " Console has to be executed with the user that owns the file config/config.php " . PHP_EOL ;
echo " Current user id: " . $user . PHP_EOL ;
echo " Owner id of config.php: " . $configUser . PHP_EOL ;
echo " Try adding 'sudo -u # " . $configUser . " ' to the beginning of the command (without the single quotes) " . PHP_EOL ;
echo " If running with 'docker exec' try adding the option '-u " . $configUser . " ' to the docker command (without the single quotes) " . PHP_EOL ;
2016-10-13 09:45:43 -04:00
exit ( 1 );
2015-01-12 10:49:36 -05:00
}
2015-12-17 04:48:29 -05:00
$oldWorkingDir = getcwd ();
if ( $oldWorkingDir === false ) {
2017-08-11 09:47:24 -04:00
echo " This script can be run from the Nextcloud root directory only. " . PHP_EOL ;
2015-12-17 04:48:29 -05:00
echo " Can't determine current working dir - the script will continue to work but be aware of the above fact. " . PHP_EOL ;
2020-04-10 04:35:09 -04:00
} elseif ( $oldWorkingDir !== __DIR__ && ! chdir ( __DIR__ )) {
2017-08-11 09:47:24 -04:00
echo " This script can be run from the Nextcloud root directory only. " . PHP_EOL ;
echo " Can't change to Nextcloud root directory. " . PHP_EOL ;
2015-12-17 04:48:29 -05:00
exit ( 1 );
}
2022-05-24 08:34:20 -04:00
if ( ! ( function_exists ( 'pcntl_signal' ) && function_exists ( 'pcntl_signal_dispatch' )) && ! in_array ( '--no-warnings' , $argv )) {
2020-09-17 11:23:07 -04:00
echo " The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see https://www.php.net/manual/en/book.pcntl.php " . PHP_EOL ;
2022-06-01 05:12:56 -04:00
echo " Additionally the function 'pcntl_signal' and 'pcntl_signal_dispatch' need to be enabled in your php.ini. " . PHP_EOL ;
2016-01-29 10:03:35 -05:00
}
2024-06-27 06:26:53 -04:00
$eventLogger = \OCP\Server :: get ( IEventLogger :: class );
$eventLogger -> start ( 'console:build_application' , 'Build Application instance and load commands' );
2024-03-06 06:17:13 -05:00
$application = \OCP\Server :: get ( Application :: class );
2024-06-25 11:03:19 -04:00
$argv = $_SERVER [ 'argv' ];
if (( $key = array_search ( '--debug' , $argv )) !== false ) {
// Remove --debug option if it was passed
unset ( $argv [ $key ]);
$argv = array_values ( $argv );
}
$input = new ArgvInput ( $argv );
$application -> loadCommands ( $input , new ConsoleOutput ());
2024-06-27 06:26:53 -04:00
$eventLogger -> end ( 'console:build_application' );
$eventLogger -> start ( 'console:run' , 'Run the command' );
$application -> setAutoExit ( false );
2024-06-25 11:03:19 -04:00
$exitCode = $application -> run ( $input );
2024-06-27 06:26:53 -04:00
$eventLogger -> end ( 'console:run' );
$profiler = \OCP\Server :: get ( IProfiler :: class );
if ( $profiler -> isEnabled ()) {
$eventLogger -> end ( 'runtime' );
$profile = $profiler -> collect ( \OCP\Server :: get ( IRequest :: class ), new Response ());
$profile -> setMethod ( 'occ' );
$profile -> setUrl ( implode ( ' ' , $argv ));
$profiler -> saveProfile ( $profile );
}
if ( $exitCode > 255 ) {
$exitCode = 255 ;
}
exit ( $exitCode );
2014-05-19 09:26:57 -04:00
} catch ( Exception $ex ) {
2016-04-18 16:30:01 -04:00
exceptionHandler ( $ex );
2016-04-20 12:01:47 -04:00
} catch ( Error $ex ) {
exceptionHandler ( $ex );
2013-09-13 12:10:04 -04:00
}