Merge pull request #14993 from owncloud/stop-on-missing-deps

Stop executing, when 3rdparty is missing or apps directory is invalid
This commit is contained in:
Thomas Müller 2015-03-20 11:36:02 +01:00
commit a87cc90d1e
2 changed files with 41 additions and 30 deletions

View file

@ -80,6 +80,10 @@ class OC {
*/
public static $server = null;
/**
* @throws \RuntimeException when the 3rdparty directory is missing or
* the app path list is empty or contains an invalid path
*/
public static function initPaths() {
// calculate the root directories
OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
@ -155,10 +159,9 @@ class OC {
}
}
if (empty(OC::$THIRDPARTYROOT) || !file_exists(OC::$THIRDPARTYROOT)) {
echo('3rdparty directory not found! Please put the ownCloud 3rdparty'
throw new \RuntimeException('3rdparty directory not found! Please put the ownCloud 3rdparty'
. ' folder in the ownCloud folder or the folder above.'
. ' You can also configure the location in the config.php file.');
return;
}
// search the apps folder
@ -182,12 +185,17 @@ class OC {
}
if (empty(OC::$APPSROOTS)) {
throw new Exception('apps directory not found! Please put the ownCloud apps folder in the ownCloud folder'
throw new \RuntimeException('apps directory not found! Please put the ownCloud apps folder in the ownCloud folder'
. ' or the folder above. You can also configure the location in the config.php file.');
}
$paths = array();
foreach (OC::$APPSROOTS as $path) {
$paths[] = $path['path'];
if (!is_dir($path['path'])) {
throw new \RuntimeException(sprintf('App directory "%s" not found! Please put the ownCloud apps folder in the'
. ' ownCloud folder or the folder above. You can also configure the location in the'
. ' config.php file.', $path['path']));
}
}
// set the right include path
@ -465,17 +473,20 @@ class OC {
self::$CLI = (php_sapi_name() == 'cli');
self::initPaths();
// setup 3rdparty autoloader
$vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
if (file_exists($vendorAutoLoad)) {
try {
self::initPaths();
// setup 3rdparty autoloader
$vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
if (!file_exists($vendorAutoLoad)) {
throw new \RuntimeException('Composer autoloader not found, unable to continue. Check the folder "3rdparty".');
}
require_once $vendorAutoLoad;
} else {
} catch (\RuntimeException $e) {
OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
// we can't use the template error page here, because this needs the
// DI container which isn't available yet
print('Composer autoloader not found, unable to continue. Check the folder "3rdparty".');
print($e->getMessage());
exit();
}

View file

@ -1,23 +1,23 @@
<?php
$CONFIG = array (
"appstoreenabled" => false,
'apps_paths' =>
array (
0 =>
array (
'path' => OC::$SERVERROOT.'/apps',
'url' => '/apps',
'writable' => true,
),
1 =>
array (
'path' => OC::$SERVERROOT.'/apps2',
'url' => '/apps2',
'writable' => false,
)
),
);
$CONFIG = [
'appstoreenabled' => false,
'apps_paths' => [
[
'path' => OC::$SERVERROOT . '/apps',
'url' => '/apps',
'writable' => true,
],
],
];
if(substr(strtolower(PHP_OS), 0, 3) == "win") {
$CONFIG['openssl'] = array( 'config' => OC::$SERVERROOT.'/tests/data/openssl.cnf');
if (is_dir(OC::$SERVERROOT.'/apps2')) {
$CONFIG['apps_paths'][] = [
'path' => OC::$SERVERROOT . '/apps2',
'url' => '/apps2',
'writable' => false,
];
}
if (substr(strtolower(PHP_OS), 0, 3) === 'win') {
$CONFIG['openssl'] = ['config' => OC::$SERVERROOT . '/tests/data/openssl.cnf'];
}