Browse Source

[alias] RootAliasPackage manages the requirements correctly

Vadim Tyukov 11 years ago
parent
commit
b02bdb4c7a
2 changed files with 31 additions and 25 deletions
  1. 23 23
      src/Composer/Package/AliasPackage.php
  2. 8 2
      src/Composer/Package/RootAliasPackage.php

+ 23 - 23
src/Composer/Package/AliasPackage.php

@@ -28,6 +28,7 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
     protected $stability;
 
     protected $requires;
+    protected $devRequires;
     protected $conflicts;
     protected $provides;
     protected $replaces;
@@ -51,32 +52,15 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
         $this->stability = VersionParser::parseStability($version);
         $this->dev = $this->stability === 'dev';
 
-        // replace self.version dependencies
-        foreach (array('requires', 'devRequires') as $type) {
-            $links = $aliasOf->{'get'.ucfirst($type)}();
-            foreach ($links as $index => $link) {
-                // link is self.version, but must be replacing also the replaced version
-                if ('self.version' === $link->getPrettyConstraint()) {
-                    $links[$index] = new Link($link->getSource(), $link->getTarget(), new VersionConstraint('=', $this->version), $type, $prettyVersion);
-                }
-            }
-            $this->$type = $links;
-        }
-
-        // duplicate self.version provides
-        foreach (array('conflicts', 'provides', 'replaces') as $type) {
-            $links = $aliasOf->{'get'.ucfirst($type)}();
-            $newLinks = array();
-            foreach ($links as $link) {
-                // link is self.version, but must be replacing also the replaced version
-                if ('self.version' === $link->getPrettyConstraint()) {
-                    $newLinks[] = new Link($link->getSource(), $link->getTarget(), new VersionConstraint('=', $this->version), $type, $prettyVersion);
-                }
-            }
-            $this->$type = array_merge($links, $newLinks);
+        foreach (array('requires', 'devRequires', 'conflicts', 'provides', 'replaces') as $type) {
+            $links = $aliasOf->{'get' . ucfirst($type)}();
+            $this->$type = $this->replaceSelfVersionDependencies($links, $type);
         }
     }
 
+    /**
+     * @return PackageInterface
+     */
     public function getAliasOf()
     {
         return $this->aliasOf;
@@ -177,6 +161,22 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
         return $this->rootPackageAlias;
     }
 
+    /**
+     * @param array $links
+     * @param string $linkDescription
+     * @internal param string $prettyVersion
+     * @return array
+     */
+    protected function replaceSelfVersionDependencies(array $links, $linkDescription = 'relates to')
+    {
+        foreach ($links as $index => $link) {
+            if ('self.version' === $link->getPrettyConstraint()) {
+                $links[$index] = new Link($link->getSource(), $link->getTarget(), new VersionConstraint('=', $this->version), $linkDescription, $this->prettyVersion);
+            }
+        }
+        return $links;
+    }
+
     /***************************************
      * Wrappers around the aliased package *
      ***************************************/

+ 8 - 2
src/Composer/Package/RootAliasPackage.php

@@ -63,18 +63,24 @@ class RootAliasPackage extends AliasPackage implements RootPackageInterface
     }
 
     /**
-     * {@inheritDoc}
+     * @param array $require
+     * @return mixed
      */
     public function setRequires(array $require)
     {
+        $this->requires = $this->replaceSelfVersionDependencies($require, 'requires');
+
         return $this->aliasOf->setRequires($require);
     }
 
     /**
-     * {@inheritDoc}
+     * @param array $devRequire
+     * @return mixed
      */
     public function setDevRequires(array $devRequire)
     {
+        $this->devRequires = $this->replaceSelfVersionDependencies($devRequire, 'devRequires');
+
         return $this->aliasOf->setDevRequires($devRequire);
     }