Browse Source

Correctly load branch aliases from lock file

Root aliases are also stored in the lock file, so on install do not read
them from composer.json.
Nils Adermann 5 years ago
parent
commit
c50d236378

+ 1 - 1
src/Composer/DependencyResolver/RuleSetGenerator.php

@@ -262,7 +262,7 @@ class RuleSetGenerator
 
         foreach ($request->getFixedPackages() as $package) {
             if ($package->id == -1) {
-                throw new \RuntimeException("Fixed package ".$package->getName()." was not added to solver pool.");
+                throw new \RuntimeException("Fixed package ".$package->getName()." ".$package->getVersion().($package instanceof AliasPackage ? " (alias)" : "")." was not added to solver pool.");
             }
 
             $this->addRulesForPackage($package, $ignorePlatformReqs);

+ 4 - 1
src/Composer/Installer.php

@@ -658,7 +658,8 @@ class Installer
 
         // creating repository set
         $policy = $this->createPolicy(false);
-        $repositorySet = $this->createRepositorySet($platformRepo, $aliases, $lockedRepository);
+        // use aliases from lock file only, so empty root aliases here
+        $repositorySet = $this->createRepositorySet($platformRepo, array(), $lockedRepository);
         $repositorySet->addRepository($lockedRepository);
 
         $this->io->writeError('<info>Installing dependencies from lock file'.($this->devMode ? ' (including require-dev)' : '').'</info>');
@@ -708,6 +709,8 @@ class Installer
 
             // TODO should we warn people / error if plugins in vendor folder do not match contents of lock file before update?
             //$this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, $this->devMode, $policy, $repositorySet, $installedRepo, $request, $lockTransaction);
+        } else {
+            // need to still create the pool to reconstruct aliases
         }
 
         // TODO in how far do we need to do anything here to ensure dev packages being updated to latest in lock without version change are treated correctly?

+ 5 - 0
src/Composer/Package/Locker.php

@@ -176,6 +176,11 @@ class Locker
                 $package = $this->loader->load($info);
                 $packages->addPackage($package);
                 $packageByName[$package->getName()] = $package;
+
+                if ($package instanceof AliasPackage) {
+                    $packages->addPackage($package->getAliasOf());
+                    $packageByName[$package->getAliasOf()->getName()] = $package->getAliasOf();
+                }
             }
 
             if (isset($lockData['aliases'])) {

+ 1 - 1
tests/Composer/Test/Fixtures/installer/install-aliased-alias.test

@@ -31,6 +31,6 @@ Installing double aliased package
 install
 --EXPECT--
 Installing b/b (dev-foo)
-Marking b/b (1.0.x-dev) as installed, alias of b/b (dev-foo)
 Marking b/b (dev-master) as installed, alias of b/b (dev-foo)
+Marking b/b (1.0.x-dev) as installed, alias of b/b (dev-foo)
 Installing a/a (dev-master)