Skip to content
Snippets Groups Projects
Commit 7426be09 authored by Thomas Müller's avatar Thomas Müller
Browse files

Merge pull request #23448 from owncloud/issue-22993-soften-exception-on-enable-default-app

Do not abort with an exception when a default app can not be enabled
parents da8781e4 444343dc
No related branches found
No related tags found
No related merge requests found
...@@ -526,8 +526,12 @@ class OC_Installer{ ...@@ -526,8 +526,12 @@ class OC_Installer{
* Installs shipped apps * Installs shipped apps
* *
* This function installs all apps found in the 'apps' directory that should be enabled by default; * This function installs all apps found in the 'apps' directory that should be enabled by default;
* @param bool $softErrors When updating we ignore errors and simply log them, better to have a
* working ownCloud at the end instead of an aborted update.
* @return array Array of error messages (appid => Exception)
*/ */
public static function installShippedApps() { public static function installShippedApps($softErrors = false) {
$errors = [];
foreach(OC::$APPSROOTS as $app_dir) { foreach(OC::$APPSROOTS as $app_dir) {
if($dir = opendir( $app_dir['path'] )) { if($dir = opendir( $app_dir['path'] )) {
while( false !== ( $filename = readdir( $dir ))) { while( false !== ( $filename = readdir( $dir ))) {
...@@ -538,7 +542,16 @@ class OC_Installer{ ...@@ -538,7 +542,16 @@ class OC_Installer{
$enabled = isset($info['default_enable']); $enabled = isset($info['default_enable']);
if (($enabled || in_array($filename, \OC::$server->getAppManager()->getAlwaysEnabledApps())) if (($enabled || in_array($filename, \OC::$server->getAppManager()->getAlwaysEnabledApps()))
&& \OC::$server->getConfig()->getAppValue($filename, 'enabled') !== 'no') { && \OC::$server->getConfig()->getAppValue($filename, 'enabled') !== 'no') {
OC_Installer::installShippedApp($filename); if ($softErrors) {
try {
OC_Installer::installShippedApp($filename);
} catch (\Doctrine\DBAL\Exception\TableExistsException $e) {
$errors[$filename] = $e;
continue;
}
} else {
OC_Installer::installShippedApp($filename);
}
\OC::$server->getConfig()->setAppValue($filename, 'enabled', 'yes'); \OC::$server->getConfig()->setAppValue($filename, 'enabled', 'yes');
} }
} }
...@@ -548,6 +561,8 @@ class OC_Installer{ ...@@ -548,6 +561,8 @@ class OC_Installer{
closedir( $dir ); closedir( $dir );
} }
} }
return $errors;
} }
/** /**
......
...@@ -333,7 +333,12 @@ class Updater extends BasicEmitter { ...@@ -333,7 +333,12 @@ class Updater extends BasicEmitter {
// install new shipped apps on upgrade // install new shipped apps on upgrade
OC_App::loadApps('authentication'); OC_App::loadApps('authentication');
OC_Installer::installShippedApps(); $errors = OC_Installer::installShippedApps(true);
foreach ($errors as $appId => $exception) {
/** @var \Exception $exception */
$this->log->logException($exception, ['app' => $appId]);
$this->emit('\OC\Updater', 'failure', [$appId . ': ' . $exception->getMessage()]);
}
// post-upgrade repairs // post-upgrade repairs
$repair = new Repair(Repair::getRepairSteps()); $repair = new Repair(Repair::getRepairSteps());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment