Exemple #1
0
    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);
    }