diff --git a/src/Composer/Storage/ArchiveStorage.php b/src/Composer/Storage/ArchiveStorage.php index 30c447ed2db7..2e5df29c1b55 100644 --- a/src/Composer/Storage/ArchiveStorage.php +++ b/src/Composer/Storage/ArchiveStorage.php @@ -75,12 +75,12 @@ public function storePackage(PackageInterface $package, $sourceDir) throw new \RuntimeException('Can not initialize directory structure in ' . $dir); } - if (file_exists($fileName)) { - @unlink($fileName); + $tempFileName = sys_get_temp_dir().'/'.uniqid(basename($fileName)); + $this->compressor->compressDir($sourceDir, $tempFileName); + if (!@rename($tempFileName, $fileName)) { + throw new \RuntimeException(sprintf('Can not rename file from %s to %s.', $tempFileName, $fileName)); } - $this->compressor->compressDir($sourceDir, $fileName); - return $this->createDistribution($fileName); } diff --git a/src/Composer/Storage/RepositoryStorage.php b/src/Composer/Storage/RepositoryStorage.php index 798a26309dae..8034ff2ea964 100644 --- a/src/Composer/Storage/RepositoryStorage.php +++ b/src/Composer/Storage/RepositoryStorage.php @@ -71,6 +71,10 @@ public function storePackage(PackageInterface $package, $sourceDir) $packageCopy = self::convertPackage($package, $dist); + // Remove old package from repository in a replace situation + if ($this->repository->hasPackage($package)) { + $this->repository->removePackage($package); + } $this->repository->addPackage($packageCopy); $this->repository->write();