b374k
m1n1 1.01
Apache/2.4.41 (Ubuntu)
Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64
uid=33(www-data) gid=33(www-data) groups=33(www-data)
server ip : 62.171.164.128 | your ip : 127.0.0.1
safemode OFF
 >  / home / a / home / dev2.destoffenstraat.com / vendor / magento / framework / Code /
Filename/home/a/home/dev2.destoffenstraat.com/vendor/magento/framework/Code/GeneratedFiles.php
Size4.29 kb
Permissionrw-r--r--
Ownerroot : root
Create time21-Aug-2025 12:26
Last modified07-Jan-2021 21:08
Last accessed22-Aug-2025 21:37
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Framework\Code;

use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Exception\FileSystemException;
use Magento\Framework\Exception\RuntimeException;
use Magento\Framework\Filesystem\Directory\WriteFactory;
use Magento\Framework\Filesystem\Directory\WriteInterface;
use Magento\Framework\Lock\LockManagerInterface;

/**
* Clean generated code, DI configuration and cache folders
*/
class GeneratedFiles
{
/**
* Regenerate flag file name
*/
const REGENERATE_FLAG = '/var/.regenerate';

/**
* Regenerate lock file name
*/
const REGENERATE_LOCK = self::REGENERATE_FLAG . '.lock';

/**
* Acquire regenerate lock timeout
*/
const REGENERATE_LOCK_TIMEOUT = 5;

/**
* @var DirectoryList
*/
private $directoryList;

/**
* @var WriteInterface
*/
private $write;

/**
* @var LockManagerInterface
*/
private $lockManager;

/**
* GeneratedFiles constructor.
*
* @param DirectoryList $directoryList
* @param WriteFactory $writeFactory
* @param LockManagerInterface $lockManager
*/
public function __construct(
DirectoryList $directoryList,
WriteFactory $writeFactory,
LockManagerInterface $lockManager
) {
$this->directoryList = $directoryList;
$this->write = $writeFactory->create(BP);
$this->lockManager = $lockManager;
}

/**
* Create flag for cleaning up generated content
*
* @return void
*/
public function requestRegeneration()
{
$this->write->touch(self::REGENERATE_FLAG);
}

/**
* Clean generated code, generated metadata and cache directories
*
* @return void
*
* @deprecated 100.1.0
* @see \Magento\Framework\Code\GeneratedFiles::cleanGeneratedFiles
*/
public function regenerate()
{
$this->cleanGeneratedFiles();
}

/**
* Clean generated code, generated metadata and cache directories
*
* @return void
*/
public function cleanGeneratedFiles()
{
if ($this->isCleanGeneratedFilesAllowed() && $this->acquireLock()) {
try {
$this->write->delete(self::REGENERATE_FLAG);
$this->deleteFolder(DirectoryList::GENERATED_CODE);
$this->deleteFolder(DirectoryList::GENERATED_METADATA);
$this->deleteFolder(DirectoryList::CACHE);
} catch (FileSystemException $exception) {
// A filesystem error occurred, possible concurrency error while trying
// to delete a generated folder being used by another process.
// Request regeneration for the next and unlock
$this->requestRegeneration();
} finally {
$this->lockManager->unlock(self::REGENERATE_LOCK);
}
}
}

/**
* Clean generated files is allowed if requested and not locked
*
* @return bool
*/
private function isCleanGeneratedFilesAllowed(): bool
{
try {
$isAllowed = $this->write->isExist(self::REGENERATE_FLAG)
&& !$this->lockManager->isLocked(self::REGENERATE_LOCK);
} catch (FileSystemException | RuntimeException $e) {
// Possible filesystem problem
$isAllowed = false;
}

return $isAllowed;
}

/**
* Acquire lock for performing operations
*
* @return bool
*/
private function acquireLock(): bool
{
try {
$lockAcquired = $this->lockManager->lock(self::REGENERATE_LOCK, self::REGENERATE_LOCK_TIMEOUT);
} catch (RuntimeException $exception) {
// Lock not acquired due to possible filesystem problem
$lockAcquired = false;
}

return $lockAcquired;
}

/**
* Delete folder by path
*
* @param string $pathType
* @return void
*/
private function deleteFolder(string $pathType): void
{
$relativePath = $this->write->getRelativePath($this->directoryList->getPath($pathType));
if ($this->write->isDirectory($relativePath)) {
$this->write->delete($relativePath);
}
}
}