From bd637d374bb69ef1d7abd14f713503e24f5d138f Mon Sep 17 00:00:00 2001 From: Helmut Hummel <typo3@helhum.io> Date: Tue, 5 Oct 2021 23:48:50 +0200 Subject: [PATCH] [BUGFIX] Fix some minor Composer mode path inconsistencies * Use config API instead of env vars when building package artifact * Don't try to scan for extensions in Composer mode * Don't create extension directory in Composer mode, as the composer installer takes care of creating it if needed * Don't try to scan extension directory if it does not exist * Use package type instead of install path to distinguish core extensions Releases: master Resolves: #95483 Change-Id: I63ff42c301eba66e85471702fb03739374f7821c Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/71453 Tested-by: core-ci <typo3@b13.com> Tested-by: Oliver Bartsch <bo@cedev.de> Tested-by: Simon Gilli <typo3@gilbertsoft.org> Tested-by: Helmut Hummel <typo3@helhum.io> Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Benjamin Franzke <bfr@qbus.de> Reviewed-by: Oliver Hader <oliver.hader@typo3.org> Reviewed-by: Simon Gilli <typo3@gilbertsoft.org> Reviewed-by: Benni Mack <benni@typo3.org> Reviewed-by: Helmut Hummel <typo3@helhum.io> --- .../Classes/Composer/PackageArtifactBuilder.php | 4 ++-- .../sysext/core/Classes/Package/PackageManager.php | 3 +++ .../Classes/Controller/UpgradeController.php | 6 +++++- .../Classes/FolderStructure/DefaultFactory.php | 7 ------- .../Classes/Service/LanguagePackService.php | 14 +++----------- 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php b/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php index 1492746422e7..6aae34d4ee00 100644 --- a/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php +++ b/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php @@ -92,7 +92,7 @@ class PackageArtifactBuilder extends PackageManager implements InstallerScript } $this->sortPackagesAndConfiguration(); $cacheIdentifier = md5(serialize($composer->getLocker()->getLockData())); - $this->setPackageCache(new ComposerPackageArtifact(getenv('TYPO3_PATH_APP') . '/var', new Filesystem(), $cacheIdentifier)); + $this->setPackageCache(new ComposerPackageArtifact($this->config->get('app-dir') . '/var', new Filesystem(), $cacheIdentifier)); $this->saveToPackageCache(); return true; @@ -271,7 +271,7 @@ class PackageArtifactBuilder extends PackageManager implements InstallerScript */ private function scanForRootExtensions(): array { - $thirdPartyExtensionDir = getenv('TYPO3_PATH_ROOT') . '/typo3conf/ext'; + $thirdPartyExtensionDir = $this->config->get('root-dir') . '/typo3conf/ext'; if (!is_dir($thirdPartyExtensionDir) || !$this->hasSubDirectories($thirdPartyExtensionDir)) { return []; } diff --git a/typo3/sysext/core/Classes/Package/PackageManager.php b/typo3/sysext/core/Classes/Package/PackageManager.php index 5268cc381184..66079e71bb13 100644 --- a/typo3/sysext/core/Classes/Package/PackageManager.php +++ b/typo3/sysext/core/Classes/Package/PackageManager.php @@ -249,6 +249,9 @@ class PackageManager implements SingletonInterface */ public function scanAvailablePackages() { + if (Environment::isComposerMode()) { + return; + } $packagePaths = $this->scanPackagePathsForExtensions(); $packages = []; foreach ($packagePaths as $packageKey => $packagePath) { diff --git a/typo3/sysext/install/Classes/Controller/UpgradeController.php b/typo3/sysext/install/Classes/Controller/UpgradeController.php index 92aafe3b71df..f9e8bc44e5b8 100644 --- a/typo3/sysext/install/Classes/Controller/UpgradeController.php +++ b/typo3/sysext/install/Classes/Controller/UpgradeController.php @@ -211,7 +211,11 @@ class UpgradeController extends AbstractController public function cardsAction(ServerRequestInterface $request): ResponseInterface { $view = $this->initializeStandaloneView($request, 'Upgrade/Cards.html'); - $view->assign('extensionFoldersInTypo3conf', (new Finder())->directories()->in(Environment::getExtensionsPath())->depth(0)->count()); + $installedExtensions = 0; + if (is_dir(Environment::getExtensionsPath())) { + $installedExtensions = (new Finder())->directories()->in(Environment::getExtensionsPath())->depth(0)->count(); + } + $view->assign('extensionFoldersInTypo3conf', $installedExtensions); return new JsonResponse([ 'success' => true, 'html' => $view->render(), diff --git a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php index 422fca2b0d2a..6d8d502681be 100644 --- a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php +++ b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php @@ -164,13 +164,6 @@ class DefaultFactory 'name' => 'typo3conf', 'type' => DirectoryNode::class, 'targetPermission' => $directoryPermission, - 'children' => [ - [ - 'name' => 'ext', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - ], - ], ], $this->getFileadminStructure(), ]; diff --git a/typo3/sysext/install/Classes/Service/LanguagePackService.php b/typo3/sysext/install/Classes/Service/LanguagePackService.php index ae39779b61ca..e25c04c78ced 100644 --- a/typo3/sysext/install/Classes/Service/LanguagePackService.php +++ b/typo3/sysext/install/Classes/Service/LanguagePackService.php @@ -217,15 +217,8 @@ class LanguagePackService throw new \RuntimeException('Language iso code ' . (string)$iso . ' not available or active', 1520117054); } $packageManager = GeneralUtility::makeInstance(PackageManager::class); - $activePackages = $packageManager->getActivePackages(); - $packageActive = false; - foreach ($activePackages as $package) { - if ($package->getPackageKey() === $key) { - $packageActive = true; - break; - } - } - if (!$packageActive) { + $package = $packageManager->getActivePackages()[$key] ?? null; + if (!$package) { throw new \RuntimeException('Extension ' . (string)$key . ' not loaded', 1520117245); } @@ -234,9 +227,8 @@ class LanguagePackService // Allow to modify the base url on the fly $event = $this->eventDispatcher->dispatch(new ModifyLanguagePackRemoteBaseUrlEvent(new Uri($languagePackBaseUrl), $key)); $languagePackBaseUrl = $event->getBaseUrl(); - $path = ExtensionManagementUtility::extPath($key); $majorVersion = GeneralUtility::makeInstance(Typo3Version::class)->getMajorVersion(); - if (strpos($path, '/sysext/') !== false) { + if ($package->getValueFromComposerManifest('type') === 'typo3-cms-framework') { // This is a system extension and the package URL should be adapted to have different packs per core major version // https://localize.typo3.org/xliff/b/a/backend-l10n/backend-l10n-fr.v9.zip $packageUrl = $key[0] . '/' . $key[1] . '/' . $key . '-l10n/' . $key . '-l10n-' . $iso . '.v' . $majorVersion . '.zip'; -- GitLab