diff options
author | blizzz <blizzz@owncloud.com> | 2013-07-18 13:30:07 -0700 |
---|---|---|
committer | blizzz <blizzz@owncloud.com> | 2013-07-18 13:30:07 -0700 |
commit | 8e3bd982641570272836da2c90da9ba020bb9212 (patch) | |
tree | 1cc49d0de1b6c2060627e54b333ccdc9370dc97a /core | |
parent | 2ad4af1651e9ae5c17ddf15b3ae258bc574a7e43 (diff) | |
parent | 5b18f2fc0e76dedaec00ab020b57c1fe380ccd97 (diff) | |
download | nextcloud-server-8e3bd982641570272836da2c90da9ba020bb9212.tar.gz nextcloud-server-8e3bd982641570272836da2c90da9ba020bb9212.zip |
Merge pull request #4047 from owncloud/backport_3617
Backport 3963
Diffstat (limited to 'core')
-rw-r--r-- | core/ajax/update.php | 131 |
1 files changed, 28 insertions, 103 deletions
diff --git a/core/ajax/update.php b/core/ajax/update.php index 2b9275dabd5..d530a4c7b6d 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -4,108 +4,33 @@ $RUNTIME_NOAPPS = true; require_once '../../lib/base.php'; if (OC::checkUpgrade(false)) { - \OC_DB::enableCaching(false); - - // initialize the event source before we enter maintenance mode because CSRF protection can terminate the script - $updateEventSource = new OC_EventSource(); - OC_Config::setValue('maintenance', true); - $installedVersion = OC_Config::getValue('version', '0.0.0'); - $currentVersion = implode('.', OC_Util::getVersion()); - OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::WARN); - $watcher = new UpdateWatcher($updateEventSource); - OC_Hook::connect('update', 'success', $watcher, 'success'); - OC_Hook::connect('update', 'failure', $watcher, 'failure'); - $watcher->success('Turned on maintenance mode'); - try { - $result = OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml'); - $watcher->success('Updated database'); - - // do a file cache upgrade for users with files - // this can take loooooooooooooooooooooooong - __doFileCacheUpgrade($watcher); - } catch (Exception $exception) { - $watcher->failure($exception->getMessage()); - } - OC_Config::setValue('version', implode('.', OC_Util::getVersion())); - OC_App::checkAppsRequirements(); - // load all apps to also upgrade enabled apps - OC_App::loadApps(); - OC_Config::setValue('maintenance', false); - $watcher->success('Turned off maintenance mode'); - $watcher->done(); -} - -/** - * The FileCache Upgrade routine - * - * @param UpdateWatcher $watcher - */ -function __doFileCacheUpgrade($watcher) { - try { - $query = \OC_DB::prepare(' - SELECT DISTINCT `user` - FROM `*PREFIX*fscache` - '); - $result = $query->execute(); - } catch (\Exception $e) { - return; - } - $users = $result->fetchAll(); - if(count($users) == 0) { - return; - } - $step = 100 / count($users); - $percentCompleted = 0; - $lastPercentCompletedOutput = 0; - $startInfoShown = false; - foreach($users as $userRow) { - $user = $userRow['user']; - \OC\Files\Filesystem::initMountPoints($user); - \OC\Files\Cache\Upgrade::doSilentUpgrade($user); - if(!$startInfoShown) { - //We show it only now, because otherwise Info about upgraded apps - //will appear between this and progress info - $watcher->success('Updating filecache, this may take really long...'); - $startInfoShown = true; - } - $percentCompleted += $step; - $out = floor($percentCompleted); - if($out != $lastPercentCompletedOutput) { - $watcher->success('... '. $out.'% done ...'); - $lastPercentCompletedOutput = $out; - } - } - $watcher->success('Updated filecache'); -} - -class UpdateWatcher { - /** - * @var \OC_EventSource $eventSource; - */ - private $eventSource; - - public function __construct($eventSource) { - $this->eventSource = $eventSource; - } - - public function success($message) { - OC_Util::obEnd(); - $this->eventSource->send('success', $message); - ob_start(); - } - - public function failure($message) { - OC_Util::obEnd(); - $this->eventSource->send('failure', $message); - $this->eventSource->close(); + $eventSource = new OC_EventSource(); + $updater = new OC_Updater(); + $updater->listen('\OC_Updater', 'maintenanceStart', function () use ($eventSource) { + $eventSource->send('success', 'Turned on maintenance mode'); + }); + $updater->listen('\OC_Updater', 'maintenanceEnd', function () use ($eventSource) { + $eventSource->send('success', 'Turned off maintenance mode'); + }); + $updater->listen('\OC_Updater', 'dbUpgrade', function () use ($eventSource) { + $eventSource->send('success', 'Updated database'); + }); + $updater->listen('\OC_Updater', 'filecacheStart', function () use ($eventSource) { + $eventSource->send('success', 'Updating filecache, this may take really long...'); + }); + $updater->listen('\OC_Updater', 'filecacheDone', function () use ($eventSource) { + $eventSource->send('success', 'Updated filecache'); + }); + $updater->listen('\OC_Updater', 'filecacheProgress', function ($out) use ($eventSource) { + $eventSource->send('success', '... ' . $out . '% done ...'); + }); + $updater->listen('\OC_Updater', 'failure', function ($message) use ($eventSource) { + $eventSource->send('failure', $message); + $eventSource->close(); OC_Config::setValue('maintenance', false); - die(); - } - - public function done() { - OC_Util::obEnd(); - $this->eventSource->send('done', ''); - $this->eventSource->close(); - } + }); + $updater->upgrade(); -} + $eventSource->send('done', ''); + $eventSource->close(); +}
\ No newline at end of file |