1
0
Fork 0

Handle broken symlinks more cleanly, fixes #7255

pull/7316/head
Jordi Boggiano 2018-05-04 11:17:43 +02:00
parent 78ae0a97f7
commit e697293cd9
2 changed files with 16 additions and 1 deletions

View File

@ -18,6 +18,7 @@ use Composer\Repository\InstalledRepositoryInterface;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Silencer; use Composer\Util\Silencer;
use Composer\Util\Platform;
/** /**
* Package installation manager. * Package installation manager.
@ -71,7 +72,17 @@ class LibraryInstaller implements InstallerInterface, BinaryPresenceInterface
*/ */
public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package)
{ {
return $repo->hasPackage($package) && is_readable($this->getInstallPath($package)); if (!$repo->hasPackage($package)) {
return false;
}
$installPath = $this->getInstallPath($package);
if (is_readable($installPath)) {
return true;
}
return (Platform::isWindows() && $this->filesystem->isJunction($installPath)) || is_link($installPath);
} }
/** /**

View File

@ -103,6 +103,10 @@ class Filesystem
return $this->removeJunction($directory); return $this->removeJunction($directory);
} }
if (is_link($directory)) {
return unlink($directory);
}
if (!file_exists($directory) || !is_dir($directory)) { if (!file_exists($directory) || !is_dir($directory)) {
return true; return true;
} }