/**
  * Список установленных пакетов,
  * список репозиториев 
  */
 function cmdList()
 {
     PackageManager::get()->startup();
     $l = PackageManager::getPackageSequence();
     if (!count($l)) {
         io::out('Packages not installed');
     } else {
         io::out('~WHITE~Installed packages:~~~');
         io::out(sprintf('~SILVER~%-15s %-10s %s~~~', 'Package Name', 'Version', 'Summary'));
         foreach ($l as $p) {
             io::out(sprintf('%-15s %-10s %s', $p['name'], $p['version'], PackageManager::getInstalledPackage($p['name'], $p['version'])->summary));
         }
     }
     PackageManager::get()->shutdown();
 }
Exemple #2
0
 /**
  * Проверять возможность удаления указанного пакета.
  *
  * Если существует пакет который зависит от данного то удаление невозможно.
  *
  * Массив пакетов для удаления. Если удаление невозможно вернет false.
  *
  * @param $nvr
  * @param array $unstatisfied
  * @return array of packages | bool false 
  */
 static function isNoNeeded($nvr, &$unstatisfied)
 {
     $name = $nvr['name'];
     $pseq = PackageManager::getPackageSequence();
     $nvr['rel'] = Deps::normalizeRel($nvr['rel']);
     if ($nvr['rel'] == '=') {
         $nvr['rel'] = '>=';
     }
     $stayedList = array();
     // версии которые останцтся после уддаления
     $removedList = array();
     // версии которые необходимо удалить
     $addToRemovedList = false;
     $checkList = array();
     // пакеты которые необходимо проверить на совместимость
     for ($i = 0, $c = count($pseq); $i < $c; $i++) {
         if ($pseq[$i]['name'] != $name) {
             if ($addToRemovedList) {
                 $checkList[] = $pseq[$i];
             }
         } else {
             if (version_compare($pseq[$i]['version'], $nvr['version'], $nvr['rel'])) {
                 $addToRemovedList = true;
             }
             if ($addToRemovedList) {
                 $removedList[] = PackageManager::getInstalledPackage($pseq[$i]['name'], $pseq[$i]['version']);
             } else {
                 $stayedList[] = $pseq[$i];
             }
         }
     }
     /*
             io::out('Stayed list : '.$name, false);
             foreach($stayedList as $a) io::out($a['name'].'='.$a['version']. ' ', false);
             io::out();
     
             io::out('removes list : ', false);
             foreach($removedList as $a) io::out($a->version. ' ', false);
             io::out();
     
             io::out('CheckList : ', false);
             foreach($checkList as $a) io::out($a['name'].' '.$a['version'].', ', false);
             io::out();
     */
     foreach ($checkList as $pnvr) {
         $packageDeps = PackageManager::getInstalledPackage($pnvr['name'], $pnvr['version'])->deps['packages'];
         foreach ($packageDeps as $p) {
             if ($p['name'] == $name) {
                 $statisfy = false;
                 $luns = array();
                 // localUnstatisfied
                 //io::out($nvr['name'].' '.$nvr['version']);
                 //print_r($p);
                 // Все версии пакета будут удалены, а пакет фигурирует в зависимостях
                 if (count($stayedList) == 0) {
                     $luns[$p['name'] . ' ' . $p['rel'] . ' ' . $p['version']] = 1;
                 } else {
                     foreach ($stayedList as $stayedPackage) {
                         if (!version_compare($stayedPackage['version'], $p['version'], $p['rel'])) {
                             $luns[$p['name'] . ' ' . $p['rel'] . ' ' . $p['version']] = 1;
                         } else {
                             $statisfy = true;
                             break;
                         }
                     }
                 }
                 // если после удаления не останется ниодного пакета удовлетворяющего зависимости,
                 // то добавляем в массив нудовлетворенных зависимостей $luns
                 if (!$statisfy) {
                     $unstatisfied[$pnvr['name'] . '(' . $pnvr['version'] . ')'] = $luns;
                 }
             }
         }
     }
     return count($unstatisfied) ? false : array_reverse($removedList);
 }
Exemple #3
0
 /**
  * Возвращает объект установленного пакета.
  *
  * @param string name
  * @return Package or false if packages not installed
  */
 static function getInstalledPackage($name, $version = null)
 {
     if (is_null($version)) {
         foreach (array_reverse(PackageManager::getPackageSequence()) as $p) {
             if ($p['name'] == $name) {
                 $version = $p['version'];
                 break;
             }
         }
     }
     if (is_null($version)) {
         return false;
     }
     $iFile = PackageManager::getInstalledDir()->getFile($name . '_' . $version . '.tbz');
     return Package::isPackage($iFile);
 }