bug #17626 Try to delete broken symlinks (IchHabRecht)

This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes #17626).

Discussion
----------

Try to delete broken symlinks

If you delete the target of a symlink (at least on Windows systems) you
don't get the kind of the target anymore (obviously). Therefore it might
happen that a broken symlink to a directory should be removed with
unlink() which fails. This patch adds another check for a broken symlink
and tries to remove with rmdir() before throwing an exception. It helps
to clean up test folders on Windows systems (so already proofed by the
existing tests).

Commits
-------

8442ab1 [Filesystem] Try to delete broken symlinks
This commit is contained in:
Nicolas Grekas 2016-03-02 14:09:42 +01:00
commit 36cb46a71a

View File

@ -161,8 +161,15 @@ class Filesystem
}
} else {
if (true !== @unlink($file)) {
$error = error_get_last();
throw new IOException(sprintf('Failed to remove file "%s": %s.', $file, $error['message']));
// handle broken symlinks on Windows systems
if (is_link($file) && false === @readlink($file)) {
if (true !== @rmdir($file)) {
throw new IOException(sprintf('Failed to remove broken symlink "%s".', $file), 0, null, $file);
}
} else {
$error = error_get_last();
throw new IOException(sprintf('Failed to remove file "%s": %s.', $file, $error['message']));
}
}
}
}