Fix edge case where one adds a target-dir on a package that didnt have one before, refs #2279

main
Jordi Boggiano 11 years ago
parent a813867065
commit 807600b255

@ -161,7 +161,15 @@ class LibraryInstaller implements InstallerInterface
$initialDownloadPath = $this->getInstallPath($initial); $initialDownloadPath = $this->getInstallPath($initial);
$targetDownloadPath = $this->getInstallPath($target); $targetDownloadPath = $this->getInstallPath($target);
if ($targetDownloadPath !== $initialDownloadPath) { if ($targetDownloadPath !== $initialDownloadPath) {
$this->filesystem->copyThenRemove($initialDownloadPath, $targetDownloadPath); // if the target is part of the initial dir, we force a remove + install
// to avoid the rename wiping the target dir as part of the initial dir cleanup
if (strpos($initialDownloadPath, $targetDownloadPath) === 0) {
$this->removeCode($initial);
$this->installCode($target);
return;
}
$this->filesystem->rename($initialDownloadPath, $targetDownloadPath);
} }
$this->downloadManager->update($initial, $target, $targetDownloadPath); $this->downloadManager->update($initial, $target, $targetDownloadPath);
} }

@ -135,7 +135,7 @@ class LibraryInstallerTest extends TestCase
->getMock(); ->getMock();
$filesystem $filesystem
->expects($this->once()) ->expects($this->once())
->method('copyThenRemove') ->method('rename')
->with($this->vendorDir.'/package1', $this->vendorDir.'/package1/newtarget'); ->with($this->vendorDir.'/package1', $this->vendorDir.'/package1/newtarget');
$initial = $this->createPackageMock(); $initial = $this->createPackageMock();

Loading…
Cancel
Save