diff options
author | icewind1991 <icewind1991@gmail.com> | 2013-07-08 12:38:39 -0700 |
---|---|---|
committer | icewind1991 <icewind1991@gmail.com> | 2013-07-08 12:38:39 -0700 |
commit | af1c3dd4ce32d84ec858e7c5c9a68ffe404c5022 (patch) | |
tree | 901f4f5c295e0d12f50ed564c4209c7a9ffafac1 /core | |
parent | 15907f6aee6c8a7affefb828aecee0da41887f79 (diff) | |
parent | a0d5ba116750bf78ca349ec1f3c9560aa12c3261 (diff) | |
download | nextcloud-server-af1c3dd4ce32d84ec858e7c5c9a68ffe404c5022.tar.gz nextcloud-server-af1c3dd4ce32d84ec858e7c5c9a68ffe404c5022.zip |
Merge pull request #3963 from owncloud/update-logic-split
Move the upgrade logic to \OC\Updater
Diffstat (limited to 'core')
-rw-r--r-- | core/ajax/update.php | 135 |
1 files changed, 28 insertions, 107 deletions
diff --git a/core/ajax/update.php b/core/ajax/update.php index db00da02239..43ed75b07f1 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -4,113 +4,34 @@ $RUNTIME_NOAPPS = true; require_once '../../lib/base.php'; if (OC::checkUpgrade(false)) { - \OC_DB::enableCaching(false); - 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); - $updateEventSource = new OC_EventSource(); - $watcher = new UpdateWatcher($updateEventSource); - OC_Hook::connect('update', 'success', $watcher, 'success'); - OC_Hook::connect('update', 'error', $watcher, 'error'); - 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 error($message) { - OC_Util::obEnd(); - $this->eventSource->send('error', $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(\OC_Log::$object); + $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(); -}
\ No newline at end of file + $eventSource->send('done', ''); + $eventSource->close(); +} |