Skip to content

Commit 870b4f0

Browse files
committed
Merge branch '4.4' into 5.1
* 4.4: [Filesystem] Check if failed unlink was caused by permission denied fix APCu installation for the nightly build job skip Vulcain-based tests if the binary cannot be executed
2 parents 2ca5176 + 0921fda commit 870b4f0

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

Filesystem.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public function remove($files)
175175
if (!self::box('rmdir', $file) && file_exists($file)) {
176176
throw new IOException(sprintf('Failed to remove directory "%s": ', $file).self::$lastError);
177177
}
178-
} elseif (!self::box('unlink', $file) && file_exists($file)) {
178+
} elseif (!self::box('unlink', $file) && (false !== strpos(self::$lastError, 'Permission denied') || file_exists($file))) {
179179
throw new IOException(sprintf('Failed to remove file "%s": ', $file).self::$lastError);
180180
}
181181
}

Tests/FilesystemTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Filesystem\Tests;
1313

14+
use Symfony\Component\Filesystem\Exception\IOException;
15+
1416
/**
1517
* Test class for Filesystem.
1618
*/
@@ -334,6 +336,28 @@ public function testRemoveIgnoresNonExistingFiles()
334336
$this->assertFileDoesNotExist($basePath.'dir');
335337
}
336338

339+
public function testRemoveThrowsExceptionOnPermissionDenied()
340+
{
341+
$this->markAsSkippedIfChmodIsMissing();
342+
343+
$basePath = $this->workspace.\DIRECTORY_SEPARATOR.'dir_permissions';
344+
mkdir($basePath);
345+
$file = $basePath.\DIRECTORY_SEPARATOR.'file';
346+
touch($file);
347+
chmod($basePath, 0400);
348+
349+
try {
350+
$this->filesystem->remove($file);
351+
$this->fail('Filesystem::remove() should throw an exception');
352+
} catch (IOException $e) {
353+
$this->assertStringContainsString('Failed to remove file "'.$file.'"', $e->getMessage());
354+
$this->assertStringContainsString('Permission denied', $e->getMessage());
355+
} finally {
356+
// Make sure we can clean up this file
357+
chmod($basePath, 0777);
358+
}
359+
}
360+
337361
public function testRemoveCleansInvalidLinks()
338362
{
339363
$this->markAsSkippedIfSymlinkIsMissing();

0 commit comments

Comments
 (0)