aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2016-03-21 16:31:59 +0100
committerJoas Schilling <nickvergessen@owncloud.com>2016-03-21 16:31:59 +0100
commit444343dc2bc0b5e214d09e8edef685387475b705 (patch)
treed5ec18e098030c167c3c401caff5e93dd94c920d
parent86581f66265be0dddb97f67ac867a5cb92d335e0 (diff)
downloadnextcloud-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.php19
-rw-r--r--lib/private/updater.php7
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());