diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-02-05 12:15:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-05 12:15:52 +0100 |
commit | 847bd0cf74ce183e03accf1603a1f8e5d25394b6 (patch) | |
tree | 36ddf126a2433acb6f04c5b6e762badcf6c1bf7b /lib | |
parent | 1424b3021355c6d1f8949c18bf02d47ab910f4ba (diff) | |
parent | 047fb6d2c5de9f7e414d9b412427efa5c9ad3828 (diff) | |
download | nextcloud-server-847bd0cf74ce183e03accf1603a1f8e5d25394b6.tar.gz nextcloud-server-847bd0cf74ce183e03accf1603a1f8e5d25394b6.zip |
Merge pull request #8144 from nextcloud/cache-update-occ
Repair step to clear frontend related caches
Diffstat (limited to 'lib')
-rw-r--r-- | lib/composer/composer/autoload_classmap.php | 1 | ||||
-rw-r--r-- | lib/composer/composer/autoload_static.php | 1 | ||||
-rw-r--r-- | lib/private/Repair.php | 4 | ||||
-rw-r--r-- | lib/private/Repair/ClearFrontendCaches.php | 70 | ||||
-rw-r--r-- | lib/private/Server.php | 12 | ||||
-rw-r--r-- | lib/private/Template/JSCombiner.php | 19 | ||||
-rw-r--r-- | lib/private/Template/SCSSCacher.php | 13 |
7 files changed, 111 insertions, 9 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 28004d50cf5..3eb532be0c6 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -802,6 +802,7 @@ return array( 'OC\\Repair' => $baseDir . '/lib/private/Repair.php', 'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php', 'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php', + 'OC\\Repair\\ClearFrontendCaches' => $baseDir . '/lib/private/Repair/ClearFrontendCaches.php', 'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php', 'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php', 'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index f23933fe983..2483b5689b3 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -832,6 +832,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php', 'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php', 'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php', + 'OC\\Repair\\ClearFrontendCaches' => __DIR__ . '/../../..' . '/lib/private/Repair/ClearFrontendCaches.php', 'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php', 'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php', 'OC\\Repair\\NC11\\FixMountStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/FixMountStorages.php', diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 2b671662f99..d787a1c802b 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -33,6 +33,7 @@ namespace OC; use OC\App\AppStore\Bundles\BundleFetcher; use OC\Files\AppData\Factory; use OC\Repair\CleanTags; +use OC\Repair\ClearFrontendCaches; use OC\Repair\Collation; use OC\Repair\MoveUpdaterStepFile; use OC\Repair\NC11\FixMountStorages; @@ -45,6 +46,8 @@ use OC\Repair\NC13\RepairInvalidPaths; use OC\Repair\SqliteAutoincrement; use OC\Repair\RepairMimeTypes; use OC\Repair\RepairInvalidShares; +use OC\Template\JSCombiner; +use OC\Template\SCSSCacher; use OCP\AppFramework\QueryException; use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; @@ -131,6 +134,7 @@ class Repair implements IOutput{ new FixMountStorages(\OC::$server->getDatabaseConnection()), new RepairInvalidPaths(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()), new AddLogRotateJob(\OC::$server->getJobList()), + new ClearFrontendCaches(\OC::$server->getMemCacheFactory(), \OC::$server->query(SCSSCacher::class), \OC::$server->query(JSCombiner::class)) ]; } diff --git a/lib/private/Repair/ClearFrontendCaches.php b/lib/private/Repair/ClearFrontendCaches.php new file mode 100644 index 00000000000..0a92aa8d201 --- /dev/null +++ b/lib/private/Repair/ClearFrontendCaches.php @@ -0,0 +1,70 @@ +<?php +/** + * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Repair; + +use OC\Template\JSCombiner; +use OC\Template\SCSSCacher; +use OCP\ICacheFactory; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class ClearFrontendCaches implements IRepairStep { + + /** @var ICacheFactory */ + protected $cacheFactory; + + /** @var SCSSCacher */ + protected $scssCacher; + + /** @var JSCombiner */ + protected $jsCombiner; + + public function __construct(ICacheFactory $cacheFactory, + SCSSCacher $SCSSCacher, + JSCombiner $JSCombiner) { + $this->cacheFactory = $cacheFactory; + $this->scssCacher = $SCSSCacher; + $this->jsCombiner = $JSCombiner; + } + + public function getName() { + return 'Clear frontend caches'; + } + + public function run(IOutput $output) { + try { + $c = $this->cacheFactory->createDistributed('imagePath'); + $c->clear(); + $output->info('Image cache cleared'); + + $this->scssCacher->resetCache(); + $output->info('SCSS cache cleared'); + + $this->jsCombiner->resetCache(); + $output->info('JS cache cleared'); + } catch (\Exception $e) { + $output->warning('Unable to clear the frontend cache'); + } + } +} diff --git a/lib/private/Server.php b/lib/private/Server.php index b12b92272f2..228f0ab5f97 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -112,6 +112,7 @@ use OC\Share20\ProviderFactory; use OC\Share20\ShareHelper; use OC\SystemTag\ManagerFactory as SystemTagManagerFactory; use OC\Tagging\TagMapper; +use OC\Template\JSCombiner; use OC\Template\SCSSCacher; use OCA\Theming\ThemingDefaults; @@ -967,6 +968,17 @@ class Server extends ServerContainer implements IServerContainer { $cacheFactory->createDistributed('SCSS') ); }); + $this->registerService(JSCombiner::class, function (Server $c) { + /** @var Factory $cacheFactory */ + $cacheFactory = $c->query(Factory::class); + return new JSCombiner( + $c->getAppDataDir('js'), + $c->getURLGenerator(), + $cacheFactory->createDistributed('JS'), + $c->getSystemConfig(), + $c->getLogger() + ); + }); $this->registerService(EventDispatcher::class, function () { return new EventDispatcher(); }); diff --git a/lib/private/Template/JSCombiner.php b/lib/private/Template/JSCombiner.php index 6a67dd0dede..c5adcee6854 100644 --- a/lib/private/Template/JSCombiner.php +++ b/lib/private/Template/JSCombiner.php @@ -184,9 +184,10 @@ class JSCombiner { $depFile->putContent($deps); $this->depsCache->set($folder->getName() . '-' . $depFileName, $deps); $gzipFile->putContent(gzencode($res, 9)); - + $this->logger->debug('JSCombiner: successfully cached: ' . $fileName); return true; } catch (NotPermittedException $e) { + $this->logger->error('JSCombiner: unable to cache: ' . $fileName); return false; } } @@ -227,4 +228,20 @@ class JSCombiner { return $result; } + + + /** + * Clear cache with combined javascript files + * + * @throws NotFoundException + */ + public function resetCache() { + $this->depsCache->clear(); + $appDirectory = $this->appData->getDirectoryListing(); + foreach ($appDirectory as $folder) { + foreach ($folder->getDirectoryListing() as $file) { + $file->delete(); + } + } + } } diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php index 8830a651f36..433d5e5d0bf 100644 --- a/lib/private/Template/SCSSCacher.php +++ b/lib/private/Template/SCSSCacher.php @@ -249,9 +249,10 @@ class SCSSCacher { $depFile->putContent($deps); $this->depsCache->set($folder->getName() . '-' . $depFileName, $deps); $gzipFile->putContent(gzencode($data, 9)); - $this->logger->debug($webDir.'/'.$fileNameSCSS.' compiled and successfully cached', ['app' => 'core']); + $this->logger->debug('SCSSCacher: '.$webDir.'/'.$fileNameSCSS.' compiled and successfully cached', ['app' => 'core']); return true; } catch(NotPermittedException $e) { + $this->logger->error('SCSSCacher: unable to cache: ' . $fileNameSCSS); return false; } } @@ -260,17 +261,13 @@ class SCSSCacher { * Reset scss cache by deleting all generated css files * We need to regenerate all files when variables change */ - private function resetCache() { + public function resetCache() { $this->injectedVariables = null; + $this->depsCache->clear(); $appDirectory = $this->appData->getDirectoryListing(); - if(empty($appDirectory)){ - return; - } foreach ($appDirectory as $folder) { foreach ($folder->getDirectoryListing() as $file) { - if (substr($file->getName(), -3) === 'css' || substr($file->getName(), -4) === 'deps') { - $file->delete(); - } + $file->delete(); } } } |