From a81d1249f597f9de04b3117df7936e1977e099ed Mon Sep 17 00:00:00 2001 From: Quentin Jallet Date: Fri, 22 Sep 2023 12:25:13 +0200 Subject: [PATCH 1/4] Fix Windows issue preventing compression when symbolic link is added to the archive --- src/BuildProcess/CompressApplication.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/BuildProcess/CompressApplication.php b/src/BuildProcess/CompressApplication.php index 2c7dd4e8..d4475f14 100644 --- a/src/BuildProcess/CompressApplication.php +++ b/src/BuildProcess/CompressApplication.php @@ -42,6 +42,10 @@ public function __invoke() foreach (BuiltApplicationFiles::get($this->appPath) as $file) { $relativePathName = str_replace('\\', '/', $file->getRelativePathname()); + if (PHP_OS == "WINNT" && is_dir($relativePathName) && count(array_diff(stat($relativePathName), lstat($relativePathName))) > 0) { + continue; + } + $archive->addFile($file->getRealPath(), $relativePathName); $archive->setExternalAttributesName( From 4550eaa69fbafa8739e602c1f05cc4eceecb35a2 Mon Sep 17 00:00:00 2001 From: Quentin Jallet Date: Fri, 22 Sep 2023 12:57:21 +0200 Subject: [PATCH 2/4] Apply StyleCI code formatting fixes --- src/BuildProcess/CompressApplication.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BuildProcess/CompressApplication.php b/src/BuildProcess/CompressApplication.php index d4475f14..86586d2b 100644 --- a/src/BuildProcess/CompressApplication.php +++ b/src/BuildProcess/CompressApplication.php @@ -42,7 +42,7 @@ public function __invoke() foreach (BuiltApplicationFiles::get($this->appPath) as $file) { $relativePathName = str_replace('\\', '/', $file->getRelativePathname()); - if (PHP_OS == "WINNT" && is_dir($relativePathName) && count(array_diff(stat($relativePathName), lstat($relativePathName))) > 0) { + if (PHP_OS == 'WINNT' && is_dir($relativePathName) && count(array_diff(stat($relativePathName), lstat($relativePathName))) > 0) { continue; } From 1fc3c8205c08d9ee2c1009ef57c9a3ba4937fb71 Mon Sep 17 00:00:00 2001 From: Quentin Jallet Date: Fri, 22 Sep 2023 14:52:18 +0200 Subject: [PATCH 3/4] Fix Windows preventing copying application files when symbolic links are used --- src/BuildProcess/CopyApplicationToBuildPath.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BuildProcess/CopyApplicationToBuildPath.php b/src/BuildProcess/CopyApplicationToBuildPath.php index 21cf7142..0ba6fdbb 100644 --- a/src/BuildProcess/CopyApplicationToBuildPath.php +++ b/src/BuildProcess/CopyApplicationToBuildPath.php @@ -23,7 +23,7 @@ public function __invoke() $this->ensureBuildDirectoryExists(); foreach ($this->getApplicationFiles() as $file) { - if ($file->isLink()) { + if ($file->isLink() || (PHP_OS == 'WINNT' && is_dir($file->getRealPath()) && count(array_diff(stat($file->getRealPath()), lstat($file->getRealPath()))) > 0)) { continue; } From 702de33b3ffa586cec33a90930bc1fab9224bdcd Mon Sep 17 00:00:00 2001 From: Quentin Jallet Date: Sat, 23 Sep 2023 09:46:12 +0200 Subject: [PATCH 4/4] Using fullpath comparison instead of stat vs lstat --- src/BuildProcess/CompressApplication.php | 2 +- src/BuildProcess/CopyApplicationToBuildPath.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BuildProcess/CompressApplication.php b/src/BuildProcess/CompressApplication.php index 86586d2b..ac0a2d30 100644 --- a/src/BuildProcess/CompressApplication.php +++ b/src/BuildProcess/CompressApplication.php @@ -42,7 +42,7 @@ public function __invoke() foreach (BuiltApplicationFiles::get($this->appPath) as $file) { $relativePathName = str_replace('\\', '/', $file->getRelativePathname()); - if (PHP_OS == 'WINNT' && is_dir($relativePathName) && count(array_diff(stat($relativePathName), lstat($relativePathName))) > 0) { + if (PHP_OS == 'WINNT' && substr($file->getRealPath(), -strlen($file->getRelativePathname())) != $file->getRelativePathname()) { continue; } diff --git a/src/BuildProcess/CopyApplicationToBuildPath.php b/src/BuildProcess/CopyApplicationToBuildPath.php index 0ba6fdbb..c6aa4853 100644 --- a/src/BuildProcess/CopyApplicationToBuildPath.php +++ b/src/BuildProcess/CopyApplicationToBuildPath.php @@ -23,7 +23,7 @@ public function __invoke() $this->ensureBuildDirectoryExists(); foreach ($this->getApplicationFiles() as $file) { - if ($file->isLink() || (PHP_OS == 'WINNT' && is_dir($file->getRealPath()) && count(array_diff(stat($file->getRealPath()), lstat($file->getRealPath()))) > 0)) { + if ($file->isLink() || (PHP_OS == 'WINNT' && substr($file->getRealPath(), -strlen($file->getRelativePathname())) != $file->getRelativePathname())) { continue; }