diff options
author | Joas Schilling <nickvergessen@owncloud.com> | 2016-03-21 16:31:59 +0100 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2016-03-21 16:31:59 +0100 |
commit | 444343dc2bc0b5e214d09e8edef685387475b705 (patch) | |
tree | d5ec18e098030c167c3c401caff5e93dd94c920d | |
parent | 86581f66265be0dddb97f67ac867a5cb92d335e0 (diff) | |
download | nextcloud-server-444343dc2bc0b5e214d09e8edef685387475b705.tar.gz nextcloud-server-444343dc2bc0b5e214d09e8edef685387475b705.zip |
Do not abort with an exception when a default app can not be enabled
-rw-r--r-- | lib/private/installer.php | 19 | ||||
-rw-r--r-- | lib/private/updater.php | 7 |
2 files changed, 23 insertions, 3 deletions
diff --git a/lib/private/installer.php b/lib/private/installer.php index 36fda28cd27..c026383e26e 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -526,8 +526,12 @@ class OC_Installer{ * Installs shipped apps * * 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) { if($dir = opendir( $app_dir['path'] )) { while( false !== ( $filename = readdir( $dir ))) { @@ -538,7 +542,16 @@ class OC_Installer{ $enabled = isset($info['default_enable']); if (($enabled || in_array($filename, \OC::$server->getAppManager()->getAlwaysEnabledApps())) && \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'); } } @@ -548,6 +561,8 @@ class OC_Installer{ closedir( $dir ); } } + + return $errors; } /** diff --git a/lib/private/updater.php b/lib/private/updater.php index 4f74481562b..0d567b8dfb9 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -333,7 +333,12 @@ class Updater extends BasicEmitter { // install new shipped apps on upgrade 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 $repair = new Repair(Repair::getRepairSteps()); |