![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-deploy/Service/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Deploy\Service; use Magento\Deploy\Package\Package; use Magento\Deploy\Package\PackageFile; use Magento\Framework\App\State as AppState; use Magento\Framework\Locale\ResolverInterface as LocaleResolver; use Magento\Framework\View\Asset\ContentProcessorException; use Magento\Deploy\Console\InputValidator; use Psr\Log\LoggerInterface; /** * Deploy package service */ class DeployPackage { /** * Application state object * * Allows to switch between different application areas * * @var AppState */ private $appState; /** * Locale resolver interface * * Check if given locale code is a valid one * * @var LocaleResolver */ private $localeResolver; /** * Service for deploying static files * * @var DeployStaticFile */ private $deployStaticFile; /** * Logger interface * * @var LoggerInterface */ private $logger; /** * Total count of processed files * * @var int */ private $count = 0; /** * Total count of the errors * * @var int */ private $errorsCount = 0; /** * DeployPackage constructor * * @param AppState $appState * @param LocaleResolver $localeResolver * @param DeployStaticFile $deployStaticFile * @param LoggerInterface $logger */ public function __construct( AppState $appState, LocaleResolver $localeResolver, DeployStaticFile $deployStaticFile, LoggerInterface $logger ) { $this->appState = $appState; $this->localeResolver = $localeResolver; $this->deployStaticFile = $deployStaticFile; $this->logger = $logger; } /** * Execute package deploy procedure * * @param Package $package * @param array $options * @param bool $skipLogging * @return bool true on success */ public function deploy(Package $package, array $options, $skipLogging = false) { $result = $this->appState->emulateAreaCode( $package->getArea() === Package::BASE_AREA ? 'global' : $package->getArea(), function () use ($package, $options, $skipLogging) { // emulate application locale needed for correct file path resolving $this->localeResolver->setLocale($package->getLocale()); $this->deployEmulated($package, $options, $skipLogging); } ); $package->setState(Package::STATE_COMPLETED); return $result; } /** * Execute package deploy procedure when area already emulated * * @param Package $package * @param array $options * @param bool $skipLogging * @return bool */ public function deployEmulated(Package $package, array $options, $skipLogging = false) { $this->count = 0; $this->errorsCount = 0; $this->register($package, null, $skipLogging); /** @var PackageFile $file */ foreach ($package->getFiles() as $file) { $fileId = $file->getDeployedFileId(); ++$this->count; $this->register($package, $file, $skipLogging); if ($this->checkFileSkip($fileId, $options)) { continue; } try { $this->processFile($file, $package); } catch (ContentProcessorException $exception) { $errorMessage = __('Compilation from source: ') . $file->getSourcePath() . PHP_EOL . $exception->getMessage() . PHP_EOL; $this->errorsCount++; $this->logger->critical($errorMessage); $package->deleteFile($file->getFileId()); } catch (\Exception $exception) { $this->logger->critical( 'Compilation from source ' . $file->getSourcePath() . ' failed' . PHP_EOL . (string)$exception ); $this->errorsCount++; } } // execute package post-processors (may adjust content of deployed files, or produce derivative files) foreach ($package->getPostProcessors() as $processor) { $processor->process($package, $options); } return true; } /** * Apply proper deployment action * * File can be created if content is already provided, or copied from parent package or published * * @param PackageFile $file * @param Package $package * @return void */ private function processFile(PackageFile $file, Package $package) { if ($file->getContent()) { $this->deployStaticFile->writeFile( $file->getDeployedFileName(), $package->getPath(), $file->getContent() ); } else { $parentPackage = $package->getParent(); if ($this->checkIfCanCopy($file, $package, $parentPackage)) { $this->deployStaticFile->copyFile( $file->getDeployedFileId(), $parentPackage->getPath(), $package->getPath() ); } else { $this->deployStaticFile->deployFile( $file->getFileName(), [ 'area' => $package->getArea(), 'theme' => $package->getTheme(), 'locale' => $package->getLocale(), 'module' => $file->getModule(), ] ); } } } /** * Check if file can be copied from parent package * * @param PackageFile $file * @param Package $package * @param Package $parentPackage * @return bool */ private function checkIfCanCopy(PackageFile $file, Package $package, Package $parentPackage = null) { return $parentPackage && $file->getOrigPackage() !== $package && ( $file->getArea() !== $package->getArea() || $file->getTheme() !== $package->getTheme() || $file->getLocale() !== $package->getLocale() ) && $file->getOrigPackage() === $parentPackage && $this->deployStaticFile->readFile($file->getDeployedFileId(), $parentPackage->getPath()); } /** * Check if file can be deployed * * @param string $filePath * @param array $options * @return boolean */ private function checkFileSkip($filePath, array $options) { if ($filePath !== '.') { $filePath = (string)$filePath; // phpcs:ignore Magento2.Functions.DiscouragedFunction $ext = strtolower(pathinfo($filePath, PATHINFO_EXTENSION)); // phpcs:ignore Magento2.Functions.DiscouragedFunction $basename = pathinfo($filePath, PATHINFO_BASENAME); if ($ext === 'less' && strpos($basename, '_') === 0) { return true; } $option = isset(InputValidator::$fileExtensionOptionMap[$ext]) ? InputValidator::$fileExtensionOptionMap[$ext] : null; return $option ? (isset($options[$option]) ? $options[$option] : false) : false; } return false; } /** * Add operation to log and package info files * * @param Package $package * @param PackageFile|null $file * @param bool $skipLogging * @return void */ private function register(Package $package, PackageFile $file = null, $skipLogging = false) { $info = [ 'count' => $this->count, 'last' => $file ? $file->getSourcePath() : '' ]; $this->deployStaticFile->writeTmpFile('info.json', $package->getPath(), json_encode($info)); if (!$skipLogging) { $logMessage = '.'; if ($file) { $logMessage = "Processing file '{$file->getSourcePath()}'"; if ($file->getArea()) { $logMessage .= " for area '{$file->getArea()}'"; } if ($file->getTheme()) { $logMessage .= ", theme '{$file->getTheme()}'"; } if ($file->getLocale()) { $logMessage .= ", locale '{$file->getLocale()}'"; } if ($file->getModule()) { $logMessage .= "module '{$file->getModule()}'"; } } $this->logger->info($logMessage); } } }