diff options
author | Robin Appelman <icewind@owncloud.com> | 2013-07-06 19:00:00 +0400 |
---|---|---|
committer | Arthur Schiwon <blizzz@owncloud.com> | 2013-07-12 19:44:43 +0400 |
commit | a9470181d5d5ca0a18f4b0cec486b58832bab252 (patch) | |
tree | 574091bdcf3ace4e41671c416df54261d1872eb9 /core | |
parent | 17a4cca5b7765f53ccbb9d89a8aae5005ab82189 (diff) |
backport: split upgrade logic from ajax file
Conflicts:
core/ajax/update.php
lib/updater.php
Diffstat (limited to 'core')
-rw-r--r-- | core/ajax/update.php | 128 |
1 files changed, 27 insertions, 101 deletions
diff --git a/core/ajax/update.php b/core/ajax/update.php index 2b9275dabd5..43ed75b07f1 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -4,108 +4,34 @@ $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(\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(); + $eventSource->send('done', ''); + $eventSource->close(); } |