diff --git a/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php b/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php index b73959ca803be367c533b64e33041669d51712f3..cb3767cc11fce65c015b2e6bcedcee9e253fca17 100644 --- a/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php +++ b/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php @@ -90,6 +90,11 @@ class DirectoryList extends \Magento\Framework\Filesystem\DirectoryList */ const SESSION = 'session'; + /** + * Directory for Setup application + */ + const SETUP = 'setup'; + /** * Dependency injection related file directory */ @@ -139,6 +144,7 @@ class DirectoryList extends \Magento\Framework\Filesystem\DirectoryList self::UPLOAD => [parent::PATH => 'pub/media/upload', parent::URL_PATH => 'pub/media/upload'], self::TMP_MATERIALIZATION_DIR => [parent::PATH => 'var/view_preprocessed'], self::TEMPLATE_MINIFICATION_DIR => [parent::PATH => 'var/view_preprocessed/html'], + self::SETUP => [parent::PATH => 'setup/src'], ]; return parent::getDefaultConfig() + $result; } diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php index a2f270cf278431ae1526be2447418dd9014e3a9b..6f37a57c9c00c20a9935ce1f5f223ebcefff582d 100644 --- a/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php +++ b/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php @@ -5,7 +5,6 @@ */ namespace Magento\Setup\Console\Command; -use Symfony\Component\Console\Command\Command; use Magento\Store\Model\StoreManager; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Framework\App\ObjectManager; @@ -29,6 +28,7 @@ use Magento\Setup\Module\Di\Compiler\Log\Writer; use Magento\Setup\Module\Di\Definition\Compressor; use Magento\Setup\Module\Di\Definition\Serializer\Igbinary; use Magento\Setup\Module\Di\Definition\Serializer\Standard; +use \Magento\Framework\App\Filesystem\DirectoryList; /** * Command to generate all non-existing proxies and factories, and pre-compile class definitions, @@ -36,7 +36,7 @@ use Magento\Setup\Module\Di\Definition\Serializer\Standard; * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class DiCompileMultiTenantCommand extends Command +class DiCompileMultiTenantCommand extends AbstractSetupCommand { /**#@+ * Names of input options @@ -55,6 +55,13 @@ class DiCompileMultiTenantCommand extends Command */ private $objectManager; + /** + * Filesystem Directory List + * + * @var DirectoryList + */ + private $directoryList; + /** * * @var array @@ -83,10 +90,12 @@ class DiCompileMultiTenantCommand extends Command * Constructor * * @param ObjectManagerProvider $objectManagerProvider + * @param DirectoryList $directoryList */ - public function __construct(ObjectManagerProvider $objectManagerProvider) + public function __construct(ObjectManagerProvider $objectManagerProvider, DirectoryList $directoryList) { $this->objectManager = $objectManagerProvider->get(); + $this->directoryList = $directoryList; parent::__construct(); } @@ -141,14 +150,14 @@ class DiCompileMultiTenantCommand extends Command */ protected function execute(InputInterface $input, OutputInterface $output) { - $rootDir = realpath(__DIR__ . '/../../../../../../'); $generationDir = $input->getOption(self::INPUT_KEY_GENERATION) ? $input->getOption(self::INPUT_KEY_GENERATION) - : $rootDir . '/var/generation'; + : $this->directoryList->getPath(DirectoryList::GENERATION); $testExcludePatterns = [ - "#^$rootDir/app/code/[\\w]+/[\\w]+/Test#", - "#^$rootDir/lib/internal/[\\w]+/[\\w]+/([\\w]+/)?Test#", - "#^$rootDir/setup/src/Magento/Setup/Test#", - "#^$rootDir/dev/tools/Magento/Tools/[\\w]+/Test#" + "#^" . $this->directoryList->getPath(DirectoryList::MODULES) . "/[\\w]+/[\\w]+/Test#", + "#^" . $this->directoryList->getPath(DirectoryList::LIB_INTERNAL) + . "/[\\w]+/[\\w]+/([\\w]+/)?Test#", + "#^" . $this->directoryList->getPath(DirectoryList::SETUP) . "/[\\w]+/[\\w]+/Test#", + "#^" . $this->directoryList->getRoot() . "/dev/tools/Magento/Tools/[\\w]+/Test#" ]; $fileExcludePatterns = $input->getOption('exclude-pattern') ? [$input->getOption(self::INPUT_KEY_EXCLUDE_PATTERN)] : ['#[\\\\/]M1[\\\\/]#i']; @@ -158,9 +167,9 @@ class DiCompileMultiTenantCommand extends Command $this->log = new Log($logWriter, $logWriter); AutoloaderRegistry::getAutoloader()->addPsr4('Magento\\', $generationDir . '/Magento/'); // 1 Code generation - $this->generateCode($rootDir, $generationDir, $fileExcludePatterns, $input); + $this->generateCode($generationDir, $fileExcludePatterns, $input); // 2. Compilation - $this->compileCode($rootDir, $generationDir, $fileExcludePatterns, $input); + $this->compileCode($generationDir, $fileExcludePatterns, $input); //Reporter $this->log->report(); if (!$this->log->hasError()) { @@ -177,7 +186,6 @@ class DiCompileMultiTenantCommand extends Command /** * Generate Code * - * @param string $rootDir * @param string $generationDir * @param array $fileExcludePatterns * @param InputInterface $input @@ -185,11 +193,11 @@ class DiCompileMultiTenantCommand extends Command * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ - public function generateCode($rootDir, $generationDir, $fileExcludePatterns, $input) + public function generateCode($generationDir, $fileExcludePatterns, $input) { // 1.1 Code scan $filePatterns = ['php' => '/.*\.php$/', 'di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']; - $codeScanDir = realpath($rootDir . '/app'); + $codeScanDir = $this->directoryList->getRoot() . '/app'; $directoryScanner = new Scanner\DirectoryScanner(); $this->files = $directoryScanner->scan($codeScanDir, $filePatterns, $fileExcludePatterns); $this->files['additional'] = [$input->getOption(self::INPUT_KEY_EXTRA_CLASSES_FILE)]; @@ -265,7 +273,6 @@ class DiCompileMultiTenantCommand extends Command /** * Compile Code * - * @param string $rootDir * @param string $generationDir * @param array $fileExcludePatterns * @param InputInterface $input @@ -273,16 +280,17 @@ class DiCompileMultiTenantCommand extends Command * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ - private function compileCode($rootDir, $generationDir, $fileExcludePatterns, $input) + private function compileCode($generationDir, $fileExcludePatterns, $input) { - $diDir = $input->getOption(self::INPUT_KEY_DI) ? $input->getOption(self::INPUT_KEY_DI) : $rootDir . '/var/di'; + $diDir = $input->getOption(self::INPUT_KEY_DI) ? $input->getOption(self::INPUT_KEY_DI) : + $this->directoryList->getPath(DirectoryList::DI); $relationsFile = $diDir . '/relations.ser'; $pluginDefFile = $diDir . '/plugins.ser'; $compilationDirs = [ - $rootDir . '/app/code', - $rootDir . '/lib/internal/Magento', - $rootDir . '/dev/tools/Magento/Tools', - $rootDir . '/setup/src/Magento/Setup/Module' + $this->directoryList->getPath(DirectoryList::MODULES), + $this->directoryList->getPath(DirectoryList::LIB_INTERNAL) . '/Magento', + $this->directoryList->getPath(DirectoryList::SETUP) . '/Magento/Setup/Module', + $this->directoryList->getRoot() . '/dev/tools/Magento/Tools', ]; $serializer = $input->getOption(self::INPUT_KEY_SERIALIZER) == Igbinary::NAME ? new Igbinary() : new Standard(); // 2.1 Code scan