Fix update command by using remove+install (and for now ignoring uninstalls of non-existing packages)

main
Jordi Boggiano 13 years ago
parent bf7ad0ac9f
commit 68512714f4

@ -91,19 +91,18 @@ EOT
foreach ($installedPackages as $package) { foreach ($installedPackages as $package) {
if ($package->getName() === $link->getTarget()) { if ($package->getName() === $link->getTarget()) {
$request->update($link->getTarget(), $link->getConstraint()); $constraint = new VersionConstraint('=', $package->getVersion());
continue 2; 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()); $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()) { } elseif ($composer->getLocker()->isLocked()) {
$output->writeln('> Found lockfile. Reading.'); $output->writeln('> Found lockfile. Reading.');

@ -109,6 +109,8 @@ class LibraryInstaller implements InstallerInterface
public function uninstall(PackageInterface $package) public function uninstall(PackageInterface $package)
{ {
if (!$this->repository->hasPackage($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); throw new \InvalidArgumentException('Package is not installed: '.$package);
} }

Loading…
Cancel
Save