コード例 #1
0
ファイル: Validator.php プロジェクト: rosstuck/PEAR2_Pyrus
 /**
  * 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(\PEAR2\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) {
                     \PEAR2\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 \PEAR2\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;
 }
コード例 #2
0
ファイル: v2.php プロジェクト: naderman/PEAR2_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 \PEAR2\Pyrus\Package objects
     * @param \PEAR2\MultiErrors $errs
     */
    function validateDependencies(array $toInstall, \PEAR2\MultiErrors $errs)
    {
        $dep = new \PEAR2\Pyrus\Dependency\Validator($this->packageInfo['channel'] . '/' . $this->packageInfo['name'],
            \PEAR2\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);
        }
    }
コード例 #3
0
ファイル: Base.php プロジェクト: rosstuck/PEAR2_Pyrus
 public function validateUninstallDependencies(array $uninstallPackages, \PEAR2\MultiErrors $errs)
 {
     $ret = true;
     foreach ($uninstallPackages as $package) {
         foreach ($this->reg->getDependentPackages($package) as $deppackage) {
             $dep = new \PEAR2\Pyrus\Dependency\Validator(array('channel' => $deppackage->channel, 'package' => $deppackage->name), \PEAR2\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;
 }