/** * */ static function calculate($package) { $deps = new Deps(); if ($package instanceof Package) { $di = new DepsItem($package); } else { $nvr = PackageManager::parseNRV($package); $di = new DepsItem($nvr['name']); $di->merge($nvr['version'], $nvr['rel']); if (count($di->getFiltered()) == 0) { return false; } } //if ( count($di->getFiltered()) == 1 && // Лучший из доступных пакетов установлен? if (PackageManager::getInstalledPackage($di->getPackageName(), $di->getFiltered(true)->version)) { return $di->getFiltered(true); } $deps->queue = array(&$di); while (!is_null($fpi = $di->popNext()) && !$deps->push($fpi)) { $deps->queue = array(&$di); } // restore queue if (is_null($fpi)) { return false; } $di->pushBack($fpi); return $deps->getPackagesToDeploy(); }