Clear cached app config while waiting for the SCSSCache to finish processing the file

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
Morris Jobke 2020-10-15 15:59:21 +02:00
parent 79a9feffdd
commit c48076c645
No known key found for this signature in database
GPG Key ID: FE03C3A163FEDE68
5 changed files with 32 additions and 4 deletions

View File

@ -343,4 +343,14 @@ class AppConfig implements IAppConfig {
$this->configLoaded = true;
}
/**
* Clear all the cached app config values
*
* WARNING: do not use this - this is only for usage with the SCSSCacher to
* clear the memory cache of the app config
*/
public function clearCachedConfig() {
$this->configLoaded = false;
}
}

View File

@ -1143,7 +1143,8 @@ class Server extends ServerContainer implements IServerContainer {
\OC::$SERVERROOT,
$this->getMemCacheFactory(),
$c->query(IconsCacher::class),
new TimeFactory()
new TimeFactory(),
$c->query(AppConfig::class)
);
});
$this->registerService(JSCombiner::class, function (Server $c) {

View File

@ -30,6 +30,7 @@
namespace OC\Template;
use OC\AppConfig;
use OC\Files\AppData\Factory;
use OC\Memcache\NullCache;
use OCP\AppFramework\Utility\ITimeFactory;
@ -89,6 +90,8 @@ class SCSSCacher {
/** @var IMemcache */
private $lockingCache;
/** @var AppConfig */
private $appConfig;
/**
* @param ILogger $logger
@ -109,7 +112,8 @@ class SCSSCacher {
$serverRoot,
ICacheFactory $cacheFactory,
IconsCacher $iconsCacher,
ITimeFactory $timeFactory) {
ITimeFactory $timeFactory,
AppConfig $appConfig) {
$this->logger = $logger;
$this->appData = $appDataFactory->get('css');
$this->urlGenerator = $urlGenerator;
@ -126,6 +130,7 @@ class SCSSCacher {
$this->lockingCache = $lockingCache;
$this->iconsCacher = $iconsCacher;
$this->timeFactory = $timeFactory;
$this->appConfig = $appConfig;
}
/**
@ -166,6 +171,7 @@ class SCSSCacher {
$retry = 0;
sleep(1);
while ($retry < 10) {
$this->appConfig->clearCachedConfig();
$this->logger->debug('SCSSCacher::process check in while loop follows', ['app' => 'scss_cacher']);
if (!$this->variablesChanged() && $this->isCached($fileNameCSS, $app)) {
// Inject icons vars css if any

View File

@ -23,6 +23,7 @@
namespace Test\Template;
use OC\AppConfig;
use OC\Files\AppData\AppData;
use OC\Files\AppData\Factory;
use OC\Template\CSSResourceLocator;
@ -53,6 +54,8 @@ class CSSResourceLocatorTest extends \Test\TestCase {
protected $iconsCacher;
/** @var ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
private $timeFactory;
/** @var AppConfig|\PHPUnit\Framework\MockObject\MockObject */
private $appConfig;
protected function setUp(): void {
parent::setUp();
@ -65,6 +68,7 @@ class CSSResourceLocatorTest extends \Test\TestCase {
$this->themingDefaults = $this->createMock(ThemingDefaults::class);
$this->iconsCacher = $this->createMock(IconsCacher::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->appConfig = $this->createMock(AppConfig::class);
}
private function cssResourceLocator() {
@ -80,7 +84,8 @@ class CSSResourceLocatorTest extends \Test\TestCase {
\OC::$SERVERROOT,
$this->cacheFactory,
$this->iconsCacher,
$this->timeFactory
$this->timeFactory,
$this->appConfig
);
return new CSSResourceLocator(
$this->logger,

View File

@ -23,6 +23,7 @@
namespace Test\Template;
use OC\AppConfig;
use OC\Files\AppData\AppData;
use OC\Files\AppData\Factory;
use OC\Template\IconsCacher;
@ -60,6 +61,8 @@ class SCSSCacherTest extends \Test\TestCase {
protected $iconsCacher;
/** @var ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
protected $timeFactory;
/** @var AppConfig|\PHPUnit\Framework\MockObject\MockObject */
protected $appConfig;
protected function setUp(): void {
parent::setUp();
@ -92,6 +95,8 @@ class SCSSCacherTest extends \Test\TestCase {
->method('getCachedCSS')
->willReturn($iconsFile);
$this->appConfig = $this->createMock(AppConfig::class);
$this->scssCacher = new SCSSCacher(
$this->logger,
$factory,
@ -101,7 +106,8 @@ class SCSSCacherTest extends \Test\TestCase {
\OC::$SERVERROOT,
$this->cacheFactory,
$this->iconsCacher,
$this->timeFactory
$this->timeFactory,
$this->appConfig
);
}