Exemplo n.º 1
0
 public function validateUninstallDependencies(array $uninstallPackages, \PEAR2\MultiErrors $errs)
 {
     $ret = true;
     foreach ($uninstallPackages as $package) {
         foreach ($this->reg->getDependentPackages($package) as $deppackage) {
             $dep = new \Pyrus\Dependency\Validator(array('channel' => $deppackage->channel, 'package' => $deppackage->name), \Pyrus\Validate::UNINSTALLING, $errs);
             foreach ($uninstallPackages as $test) {
                 if ($deppackage->isEqual($test)) {
                     // we are uninstalling both the package that is depended upon
                     // and the parent package, so all dependencies are nulled
                     continue 2;
                 }
             }
             foreach (array('package', 'subpackage') as $packaged) {
                 $deps = $deppackage->dependencies['required']->{$packaged};
                 if (isset($deps[$package->channel . '/' . $package->name])) {
                     $ret = $ret && $dep->validatePackageUninstall($deps[$package->channel . '/' . $package->name], $package);
                 }
                 $deps = $deppackage->dependencies['optional']->{$packaged};
                 if (isset($deps[$package->channel . '/' . $package->name])) {
                     $ret = $ret && $dep->validatePackageUninstall($deps[$package->channel . '/' . $package->name], $package);
                 }
             }
         }
     }
     return $ret;
 }
Exemplo n.º 2
0
 /**
  * validate a downloaded package against installed packages
  *
  * @param $pkg downloaded package package.xml object
  * @param array $params full list of packages to install
  * @return bool
  */
 function validateDownloadedPackage(\Pyrus\PackageFileInterface $pkg, $params = array())
 {
     $me = $pkg->channel . '/' . $pkg->name;
     $reg = Config::current()->registry;
     $deppackages = $reg->getDependentPackages($pkg);
     $fail = false;
     if ($deppackages) {
         $actual = array();
         // first, remove packages that will be installed
         foreach ($deppackages as $package) {
             foreach ($params as $packd) {
                 if (strtolower($packd->name) == strtolower($package->name) && $packd->channel == $package->channel) {
                     \Pyrus\Logger::log(3, 'skipping installed package check of "' . Config::parsedPackageNameToString(array('channel' => $package->channel, 'package' => $package->name), true) . '", version "' . $packd->version['release'] . '" will be ' . 'downloaded and installed');
                     continue 2;
                 }
             }
             $actual[] = $package;
         }
         foreach ($actual as $package) {
             $checker = new \Pyrus\Dependency\Validator(array('channel' => $package->channel, 'package' => $package->name), $this->_state, $this->errs);
             foreach ($params as $packd) {
                 $deps = $package->dependencies['required']->package;
                 if (isset($deps[$me])) {
                     $ret = $checker->_validatePackageDownload($deps[$me], array($pkg, $package));
                 }
                 $deps = $package->dependencies['required']->subpackage;
                 if (isset($deps[$me])) {
                     $ret = $checker->_validatePackageDownload($deps[$me], array($pkg));
                 }
                 $deps = $package->dependencies['optional']->package;
                 if (isset($deps[$me])) {
                     $ret = $checker->_validatePackageDownload($deps[$me], array($pkg, $package));
                 }
                 $deps = $package->dependencies['optional']->subpackage;
                 if (isset($deps[$me])) {
                     $ret = $checker->_validatePackageDownload($deps[$me], array($pkg));
                 }
             }
         }
     }
     if (count($this->errs->E_ERROR)) {
         return $this->raiseError('%s cannot be installed, conflicts with installed packages');
     }
     return true;
 }
Exemplo n.º 3
0
Arquivo: v2.php Projeto: helgi/Pyrus
 /**
  * validate dependencies against the local registry, packages to be installed,
  * and environment (php version, OS, architecture, enabled extensions)
  *
  * @param array $toInstall an array of \Pyrus\Package objects
  * @param \PEAR2\MultiErrors $errs
  */
 function validateDependencies(array $toInstall, \PEAR2\MultiErrors $errs)
 {
     $dep = new \Pyrus\Dependency\Validator($this->packageInfo['channel'] . '/' . $this->packageInfo['name'], \Pyrus\Validate::DOWNLOADING, $errs);
     $dep->validatePhpDependency($this->dependencies['required']->php);
     $dep->validatePearinstallerDependency($this->dependencies['required']->pearinstaller);
     foreach (array('required', 'optional') as $required) {
         foreach ($this->dependencies[$required]->package as $d) {
             $dep->validatePackageDependency($d, $toInstall);
         }
         foreach ($this->dependencies[$required]->subpackage as $d) {
             $dep->validateSubpackageDependency($d, $toInstall);
         }
         foreach ($this->dependencies[$required]->extension as $d) {
             $dep->validateExtensionDependency($d);
         }
     }
     foreach ($this->dependencies['required']->arch as $d) {
         $dep->validateArchDependency($d);
     }
     foreach ($this->dependencies['required']->os as $d) {
         $dep->validateOsDependency($d);
     }
 }