diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index 33dd826db..95c95371f 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -91,19 +91,18 @@ EOT foreach ($installedPackages as $package) { if ($package->getName() === $link->getTarget()) { - $request->update($link->getTarget(), $link->getConstraint()); - continue 2; + $constraint = new VersionConstraint('=', $package->getVersion()); + if ($link->getConstraint()->matches($constraint)) { + continue 2; + } + // TODO this should just update to the exact version (once constraints are available on update, see #125) + $request->remove($package->getName(), $constraint); + break; } } $request->install($link->getTarget(), $link->getConstraint()); } - - foreach ($localRepo->getPackages() as $package) { - if (!in_array($package->getName(), $listedPackages)) { - $request->remove($package->getName()); - } - } } elseif ($composer->getLocker()->isLocked()) { $output->writeln('> Found lockfile. Reading.'); diff --git a/src/Composer/Installer/LibraryInstaller.php b/src/Composer/Installer/LibraryInstaller.php index 898c4a6b9..d67d514ae 100644 --- a/src/Composer/Installer/LibraryInstaller.php +++ b/src/Composer/Installer/LibraryInstaller.php @@ -109,6 +109,8 @@ class LibraryInstaller implements InstallerInterface public function uninstall(PackageInterface $package) { if (!$this->repository->hasPackage($package)) { + // TODO throw exception again here, when update is fixed and we don't have to remove+install (see #125) + return; throw new \InvalidArgumentException('Package is not installed: '.$package); }