From d0868473db0628fcc99b2080889c3ea704c7a7a8 Mon Sep 17 00:00:00 2001 From: VolCh Date: Wed, 7 Jun 2017 14:57:47 +0300 Subject: [PATCH 1/2] [Filesystem] added workaround in Filesystem::rename for https://bugs.php.net/bug.php?id=54097 On \rename() fails try to self::mirror & self::remove if $origin is directory --- src/Symfony/Component/Filesystem/Filesystem.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index edfc1b9d46a23..4baef138f3094 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -276,6 +276,13 @@ public function rename($origin, $target, $overwrite = false) } if (true !== @rename($origin, $target)) { + if (is_dir($origin)) { + // See https://bugs.php.net/bug.php?id=54097 & http://php.net/manual/en/function.rename.php#113943 + $this->mirror($origin, $target, null, ['override' => $overwrite, 'delete' => $overwrite]); + $this->remove($origin); + + return; + } throw new IOException(sprintf('Cannot rename "%s" to "%s".', $origin, $target), 0, null, $target); } } From ae5a964f1995a733c187cb1af263a3d990b77949 Mon Sep 17 00:00:00 2001 From: VolCh Date: Wed, 7 Jun 2017 15:39:32 +0300 Subject: [PATCH 2/2] [Filesystem] fixed coding style --- 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 4baef138f3094..e60d4690738ad 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -278,7 +278,7 @@ public function rename($origin, $target, $overwrite = false) if (true !== @rename($origin, $target)) { if (is_dir($origin)) { // See https://bugs.php.net/bug.php?id=54097 & http://php.net/manual/en/function.rename.php#113943 - $this->mirror($origin, $target, null, ['override' => $overwrite, 'delete' => $overwrite]); + $this->mirror($origin, $target, null, array('override' => $overwrite, 'delete' => $overwrite)); $this->remove($origin); return;