Bläddra i källkod

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

Jordi Boggiano 13 år sedan
förälder
incheckning
68512714f4

+ 7 - 8
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.');
 

+ 2 - 0
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);
         }