From ca125a9cc5317214e386d8c06041b272b27eb7e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Rish=C3=B8j?= Date: Sun, 19 Apr 2020 21:09:19 +0200 Subject: [PATCH 1/2] handle paths on different drives --- src/Symfony/Component/Filesystem/Filesystem.php | 17 ++++++++++------- .../Filesystem/Tests/FilesystemTest.php | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index 311cf49b0ef70..43713de2ad2bd 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -435,15 +435,18 @@ public function makePathRelative(string $endPath, string $startPath) } $stripDriveLetter = function ($path) { - if (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) { - return substr($path, 2); - } - - return $path; + return (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) + ? [substr($path, 2), $path[0]] + : [$path, null]; }; - $endPath = $stripDriveLetter($endPath); - $startPath = $stripDriveLetter($startPath); + [$endPath, $endDriveLetter] = $stripDriveLetter($endPath); + [$startPath, $startDriveLetter] = $stripDriveLetter($startPath); + + if ($endDriveLetter && $startDriveLetter && $endDriveLetter <> $startDriveLetter) { + // Different drives + return $endDriveLetter.':'.$endPath; + } // Split the paths into arrays $startPathArr = explode('/', trim($startPath, '/')); diff --git a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php index dcd3c6140693e..2238698349b20 100644 --- a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php +++ b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php @@ -1155,6 +1155,7 @@ public function providePathsForMakePathRelative() ['C:/aa/bb/../../cc', 'C:/aa/../dd/..', 'cc/'], ['C:/../aa/bb/cc', 'C:/aa/dd/..', 'bb/cc/'], ['C:/../../aa/../bb/cc', 'C:/aa/dd/..', '../bb/cc/'], + ['D:/aa/bb', 'C:/aa', 'D:/aa/bb'], ]; if ('\\' === \DIRECTORY_SEPARATOR) { From aebd2561e4c78418e0f2aa03208813526d851b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Rish=C3=B8j?= Date: Sun, 19 Apr 2020 21:18:12 +0200 Subject: [PATCH 2/2] style fix --- src/Symfony/Component/Filesystem/Filesystem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index 43713de2ad2bd..3ec535a6def40 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -443,7 +443,7 @@ public function makePathRelative(string $endPath, string $startPath) [$endPath, $endDriveLetter] = $stripDriveLetter($endPath); [$startPath, $startDriveLetter] = $stripDriveLetter($startPath); - if ($endDriveLetter && $startDriveLetter && $endDriveLetter <> $startDriveLetter) { + if ($endDriveLetter && $startDriveLetter && $endDriveLetter != $startDriveLetter) { // Different drives return $endDriveLetter.':'.$endPath; }