function __construct(\PEAR2\Pyrus\Package\Dependency\Set $set, \PEAR2\Pyrus\Package $node, PackageTree $parent = null) { $this->set = $set; $this->node = $node; $this->parent = $parent; $this->name = $node->channel . '/' . $node->name; if ($node->isRemote() && $node->isAbstract()) { if ($node->getExplicitVersion()) { $this->firstVersion = $node->getExplicitVersion(); if (isset(static::$availableVersionsMap[$this->name])) { $rebuild = true; } else { $rebuild = false; } $this->allVersions = $this->versionsAvailable = array($node->version['release']); $this->setAvailableVersionsMap(); if ($rebuild) { $this->rebuild($this->name); } self::register($this); return; } if (isset(self::$availableVersionsMap[$this->name])) { $this->allVersions = $this->versionsAvailable = self::$availableVersionsMap[$this->name]; } else { while (!($node instanceof \PEAR2\Pyrus\Channel\RemotePackage)) { $node = $node->getInternalPackage(); } foreach ($node->getReleaseList() as $info) { $this->allVersions[] = $info['v']; $this->versionsAvailable[] = $info['v']; } if (null === $parent) { return $this->findParentVersion(); } $this->setAvailableVersionsMap(); } } else { $this->allVersions = $this->versionsAvailable = array($node->version['release']); $this->setAvailableVersionsMap(); } self::register($this); }