diff --git a/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php b/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php index 8e8bb60a8f8d4b4dde1544fe7cd5b2fa6c7094e9..db57f312fde1b91baea6094db7822942f74c362f 100644 --- a/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php +++ b/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php @@ -21,6 +21,7 @@ use Composer\Package\PackageInterface; use Composer\Repository\PlatformRepository; use Composer\Script\Event; use Composer\Util\Filesystem; +use Composer\Util\Platform; use Symfony\Component\Finder\Finder; use TYPO3\CMS\Composer\Plugin\Config; use TYPO3\CMS\Composer\Plugin\Core\InstallerScript; @@ -33,6 +34,7 @@ use TYPO3\CMS\Core\Package\Exception\InvalidPackageStateException; use TYPO3\CMS\Core\Package\Package; use TYPO3\CMS\Core\Package\PackageManager; use TYPO3\CMS\Core\Service\DependencyOrderingService; +use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\PathUtility; /** @@ -167,6 +169,7 @@ class PackageArtifactBuilder extends PackageManager implements InstallerScript function (array $packageAndPath) use ($rootPackage, &$usedExtensionKeys) { [$composerPackage, $packagePath] = $packageAndPath; $packageName = $composerPackage->getName(); + $packagePath = GeneralUtility::fixWindowsFilePath($packagePath); try { $extensionKey = ExtensionKeyResolver::resolve($composerPackage); } catch (\Throwable $e) { @@ -277,7 +280,9 @@ class PackageArtifactBuilder extends PackageManager implements InstallerScript [$relativePrefix] = explode('Resources/Public', $relativePath); $publicResourcesPath = $fileSystem->normalizePath($this->config->get('web-dir') . '/_assets/' . md5($relativePrefix)); $fileSystem->ensureDirectoryExists(dirname($publicResourcesPath)); - if (!$fileSystem->isSymlinkedDirectory($publicResourcesPath)) { + if (Platform::isWindows() && !$fileSystem->isJunction($publicResourcesPath)) { + $fileSystem->junction($fileSystemResourcesPath, $publicResourcesPath); + } elseif (!$fileSystem->isSymlinkedDirectory($publicResourcesPath)) { $fileSystem->relativeSymlink($fileSystemResourcesPath, $publicResourcesPath); } }