コード例 #1
0
 public function validatePearinstallerDependency($dep)
 {
     $result = parent::validatePearinstallerDependency($dep);
     if (PEAR::isError($result)) {
         $this->failedDependency['pearinstaller'] = $dep;
     }
     return $result;
 }
コード例 #2
0
 function doPackageDependencies($command, $options, $params)
 {
     // $params[0] -> the PEAR package to list its information
     if (sizeof($params) != 1) {
         return $this->raiseError("bad parameter(s), try \"help {$command}\"");
     }
     $obj =& $this->getPackageFile($this->config, $this->_debug);
     $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
     if (PEAR::isError($info)) {
         return $this->raiseError($info);
     }
     $deps = $info->getDeps();
     if (is_array($deps)) {
         if ($info->getPackagexmlVersion() == '1.0') {
             $data = array('caption' => 'Dependencies for pear/' . $info->getPackage(), 'border' => true, 'headline' => array("Required?", "Type", "Name", "Relation", "Version"));
             foreach ($deps as $d) {
                 if (isset($d['optional'])) {
                     if ($d['optional'] == 'yes') {
                         $req = 'No';
                     } else {
                         $req = 'Yes';
                     }
                 } else {
                     $req = 'Yes';
                 }
                 if (isset($this->_deps_rel_trans[$d['rel']])) {
                     $rel = $this->_deps_rel_trans[$d['rel']];
                 } else {
                     $rel = $d['rel'];
                 }
                 if (isset($this->_deps_type_trans[$d['type']])) {
                     $type = ucfirst($this->_deps_type_trans[$d['type']]);
                 } else {
                     $type = $d['type'];
                 }
                 if (isset($d['name'])) {
                     $name = $d['name'];
                 } else {
                     $name = '';
                 }
                 if (isset($d['version'])) {
                     $version = $d['version'];
                 } else {
                     $version = '';
                 }
                 $data['data'][] = array($req, $type, $name, $rel, $version);
             }
         } else {
             // package.xml 2.0 dependencies display
             require_once 'PEAR/Dependency2.php';
             $deps = $info->getDependencies();
             $reg =& $this->config->getRegistry();
             if (is_array($deps)) {
                 $d = new PEAR_Dependency2($this->config, array(), '');
                 $data = array('caption' => 'Dependencies for ' . $info->getPackage(), 'border' => true, 'headline' => array("Required?", "Type", "Name", 'Versioning', 'Group'));
                 foreach ($deps as $type => $subd) {
                     $req = $type == 'required' ? 'Yes' : 'No';
                     if ($type == 'group') {
                         $group = $subd['attribs']['name'];
                     } else {
                         $group = '';
                     }
                     if (!isset($subd[0])) {
                         $subd = array($subd);
                     }
                     foreach ($subd as $groupa) {
                         foreach ($groupa as $deptype => $depinfo) {
                             if ($deptype == 'attribs') {
                                 continue;
                             }
                             if ($deptype == 'pearinstaller') {
                                 $deptype = 'pear Installer';
                             }
                             if (!isset($depinfo[0])) {
                                 $depinfo = array($depinfo);
                             }
                             foreach ($depinfo as $inf) {
                                 $name = '';
                                 if (isset($inf['channel'])) {
                                     $alias = $reg->channelAlias($inf['channel']);
                                     if (!$alias) {
                                         $alias = '(channel?) ' . $inf['channel'];
                                     }
                                     $name = $alias . '/';
                                 }
                                 if (isset($inf['name'])) {
                                     $name .= $inf['name'];
                                 } elseif (isset($inf['pattern'])) {
                                     $name .= $inf['pattern'];
                                 } else {
                                     $name .= '';
                                 }
                                 if (isset($inf['uri'])) {
                                     $name .= ' [' . $inf['uri'] . ']';
                                 }
                                 if (isset($inf['conflicts'])) {
                                     $ver = 'conflicts';
                                 } else {
                                     $ver = $d->_getExtraString($inf);
                                 }
                                 $data['data'][] = array($req, ucfirst($deptype), $name, $ver, $group);
                             }
                         }
                     }
                 }
             }
         }
         $this->ui->outputData($data, $command);
         return true;
     }
     // Fallback
     $this->ui->outputData("This package does not have any dependencies.", $command);
 }
コード例 #3
0
ファイル: Package.php プロジェクト: hbustun/agilebill
 /**
  * @param array output of package.getDownloadURL
  * @param string|array|object information for detecting packages to be downloaded, and
  *                            for errors
  * @param array name information of the package
  * @param array|null packages to be downloaded
  * @param bool is this an optional dependency?
  * @access private
  */
 function _analyzeDownloadURL($info, $param, $pname, $params = null, $optional = false)
 {
     if (!is_string($param) && PEAR_Downloader_Package::willDownload($param, $params)) {
         return false;
     }
     if (!$info) {
         if (!is_string($param)) {
             $saveparam = ", cannot download \"{$param}\"";
         } else {
             $saveparam = '';
         }
         // no releases exist
         return PEAR::raiseError('No releases for package "' . $this->_registry->parsedPackageNameToString($pname, true) . '" exist' . $saveparam);
     }
     if (strtolower($info['info']->getChannel()) != strtolower($pname['channel'])) {
         $err = false;
         if ($pname['channel'] == 'pecl.php.net') {
             if ($info['info']->getChannel() != 'pear.php.net') {
                 $err = true;
             }
         } elseif ($info['info']->getChannel() == 'pecl.php.net') {
             if ($pname['channel'] != 'pear.php.net') {
                 $err = true;
             }
         } else {
             $err = true;
         }
         if ($err) {
             return PEAR::raiseError('SECURITY ERROR: package in channel "' . $pname['channel'] . '" retrieved another channel\'s name for download! ("' . $info['info']->getChannel() . '")');
         }
     }
     if (!isset($info['url'])) {
         $instead = ', will instead download version ' . $info['version'] . ', stability "' . $info['info']->getState() . '"';
         // releases exist, but we failed to get any
         if (isset($this->_downloader->_options['force'])) {
             if (isset($pname['version'])) {
                 $vs = ', version "' . $pname['version'] . '"';
             } elseif (isset($pname['state'])) {
                 $vs = ', stability "' . $pname['state'] . '"';
             } elseif ($param == 'dependency') {
                 if (!class_exists('PEAR_Common')) {
                     require_once 'PEAR/Common.php';
                 }
                 if (!in_array($info['info']->getState(), PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
                     if ($optional) {
                         // don't spit out confusing error message
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = ' within preferred state "' . $this->_config->get('preferred_state') . '"';
                 } else {
                     if (!class_exists('PEAR_Dependency2')) {
                         require_once 'PEAR/Dependency2.php';
                     }
                     if ($optional) {
                         // don't spit out confusing error message
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = PEAR_Dependency2::_getExtraString($pname);
                     $instead = '';
                 }
             } else {
                 $vs = ' within preferred state "' . $this->_config->get('preferred_state') . '"';
             }
             if (!isset($options['soft'])) {
                 $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] . '/' . $pname['package'] . $vs . $instead);
             }
             // download the latest release
             return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
         } else {
             // construct helpful error message
             if (isset($pname['version'])) {
                 $vs = ', version "' . $pname['version'] . '"';
             } elseif (isset($pname['state'])) {
                 $vs = ', stability "' . $pname['state'] . '"';
             } elseif ($param == 'dependency') {
                 if (!class_exists('PEAR_Common')) {
                     require_once 'PEAR/Common.php';
                 }
                 if (!in_array($info['info']->getState(), PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
                     if ($optional) {
                         // don't spit out confusing error message, and don't die on
                         // optional dep failure!
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = ' within preferred state "' . $this->_config->get('preferred_state') . '"';
                 } else {
                     if (!class_exists('PEAR_Dependency2')) {
                         require_once 'PEAR/Dependency2.php';
                     }
                     if ($optional) {
                         // don't spit out confusing error message, and don't die on
                         // optional dep failure!
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = PEAR_Dependency2::_getExtraString($pname);
                 }
             } else {
                 $vs = ' within preferred state "' . $this->_downloader->config->get('preferred_state') . '"';
             }
             $err = PEAR::raiseError('Failed to download ' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package']), true) . $vs . ', latest release is version ' . $info['version'] . ', stability "' . $info['info']->getState() . '", use "' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package'], 'version' => $info['version'])) . '" to install');
             return $err;
         }
     }
     return $info;
 }
コード例 #4
0
ファイル: Dependency2.php プロジェクト: upmunspel/abiturient
 /**
  * Convert a 1.0 dep into a 2.0 dep
  */
 function normalizeDep($dep)
 {
     $types = array('pkg' => 'Package', 'ext' => 'Extension', 'os' => 'Os', 'php' => 'Php');
     if (!isset($types[$dep['type']])) {
         return array(false, false);
     }
     $type = $types[$dep['type']];
     $newdep = array();
     switch ($type) {
         case 'Package':
             $newdep['channel'] = 'pear.php.net';
         case 'Extension':
         case 'Os':
             $newdep['name'] = $dep['name'];
             break;
     }
     $dep['rel'] = PEAR_Dependency2::signOperator($dep['rel']);
     switch ($dep['rel']) {
         case 'has':
             return array($newdep, $type);
             break;
         case 'not':
             $newdep['conflicts'] = true;
             break;
         case '>=':
         case '>':
             $newdep['min'] = $dep['version'];
             if ($dep['rel'] == '>') {
                 $newdep['exclude'] = $dep['version'];
             }
             break;
         case '<=':
         case '<':
             $newdep['max'] = $dep['version'];
             if ($dep['rel'] == '<') {
                 $newdep['exclude'] = $dep['version'];
             }
             break;
         case 'ne':
         case '!=':
             $newdep['min'] = '0';
             $newdep['max'] = '100000';
             $newdep['exclude'] = $dep['version'];
             break;
         case '==':
             $newdep['min'] = $dep['version'];
             $newdep['max'] = $dep['version'];
             break;
     }
     if ($type == 'Php') {
         if (!isset($newdep['min'])) {
             $newdep['min'] = '4.4.0';
         }
         if (!isset($newdep['max'])) {
             $newdep['max'] = '6.0.0';
         }
     }
     return array($newdep, $type);
 }
コード例 #5
0
ファイル: Package.php プロジェクト: upmunspel/abiturient
 /**
  * @param array output of package.getDownloadURL
  * @param string|array|object information for detecting packages to be downloaded, and
  *                            for errors
  * @param array name information of the package
  * @param array|null packages to be downloaded
  * @param bool is this an optional dependency?
  * @param bool is this any kind of dependency?
  * @access private
  */
 function _analyzeDownloadURL($info, $param, $pname, $params = null, $optional = false, $isdependency = false)
 {
     if (!is_string($param) && PEAR_Downloader_Package::willDownload($param, $params)) {
         return false;
     }
     if ($info === false) {
         $saveparam = !is_string($param) ? ", cannot download \"{$param}\"" : '';
         // no releases exist
         return PEAR::raiseError('No releases for package "' . $this->_registry->parsedPackageNameToString($pname, true) . '" exist' . $saveparam);
     }
     if (strtolower($info['info']->getChannel()) != strtolower($pname['channel'])) {
         $err = false;
         if ($pname['channel'] == 'pecl.php.net') {
             if ($info['info']->getChannel() != 'pear.php.net') {
                 $err = true;
             }
         } elseif ($info['info']->getChannel() == 'pecl.php.net') {
             if ($pname['channel'] != 'pear.php.net') {
                 $err = true;
             }
         } else {
             $err = true;
         }
         if ($err) {
             return PEAR::raiseError('SECURITY ERROR: package in channel "' . $pname['channel'] . '" retrieved another channel\'s name for download! ("' . $info['info']->getChannel() . '")');
         }
     }
     $preferred_state = $this->_config->get('preferred_state');
     if (!isset($info['url'])) {
         $package_version = $this->_registry->packageInfo($info['info']->getPackage(), 'version', $info['info']->getChannel());
         if ($this->isInstalled($info)) {
             if ($isdependency && version_compare($info['version'], $package_version, '<=')) {
                 // ignore bogus errors of "failed to download dependency"
                 // if it is already installed and the one that would be
                 // downloaded is older or the same version (Bug #7219)
                 return false;
             }
         }
         if ($info['version'] === $package_version) {
             if (!isset($options['soft'])) {
                 $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] . '/' . $pname['package'] . '-' . $package_version . ', additionally the suggested version' . ' (' . $package_version . ') is the same as the locally installed one.');
             }
             return false;
         }
         if (version_compare($info['version'], $package_version, '<=')) {
             if (!isset($options['soft'])) {
                 $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] . '/' . $pname['package'] . '-' . $package_version . ', additionally the suggested version' . ' (' . $info['version'] . ') is a lower version than the locally installed one (' . $package_version . ').');
             }
             return false;
         }
         $instead = ', will instead download version ' . $info['version'] . ', stability "' . $info['info']->getState() . '"';
         // releases exist, but we failed to get any
         if (isset($this->_downloader->_options['force'])) {
             if (isset($pname['version'])) {
                 $vs = ', version "' . $pname['version'] . '"';
             } elseif (isset($pname['state'])) {
                 $vs = ', stability "' . $pname['state'] . '"';
             } elseif ($param == 'dependency') {
                 if (!class_exists('PEAR_Common')) {
                     require_once 'PEAR/Common.php';
                 }
                 if (!in_array($info['info']->getState(), PEAR_Common::betterStates($preferred_state, true))) {
                     if ($optional) {
                         // don't spit out confusing error message
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = ' within preferred state "' . $preferred_state . '"';
                 } else {
                     if (!class_exists('PEAR_Dependency2')) {
                         require_once 'PEAR/Dependency2.php';
                     }
                     if ($optional) {
                         // don't spit out confusing error message
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = PEAR_Dependency2::_getExtraString($pname);
                     $instead = '';
                 }
             } else {
                 $vs = ' within preferred state "' . $preferred_state . '"';
             }
             if (!isset($options['soft'])) {
                 $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] . '/' . $pname['package'] . $vs . $instead);
             }
             // download the latest release
             return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
         } else {
             if (isset($info['php']) && $info['php']) {
                 $err = PEAR::raiseError('Failed to download ' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package']), true) . ', latest release is version ' . $info['php']['v'] . ', but it requires PHP version "' . $info['php']['m'] . '", use "' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package'], 'version' => $info['php']['v'])) . '" to install', PEAR_DOWNLOADER_PACKAGE_PHPVERSION);
                 return $err;
             }
             // construct helpful error message
             if (isset($pname['version'])) {
                 $vs = ', version "' . $pname['version'] . '"';
             } elseif (isset($pname['state'])) {
                 $vs = ', stability "' . $pname['state'] . '"';
             } elseif ($param == 'dependency') {
                 if (!class_exists('PEAR_Common')) {
                     require_once 'PEAR/Common.php';
                 }
                 if (!in_array($info['info']->getState(), PEAR_Common::betterStates($preferred_state, true))) {
                     if ($optional) {
                         // don't spit out confusing error message, and don't die on
                         // optional dep failure!
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = ' within preferred state "' . $preferred_state . '"';
                 } else {
                     if (!class_exists('PEAR_Dependency2')) {
                         require_once 'PEAR/Dependency2.php';
                     }
                     if ($optional) {
                         // don't spit out confusing error message, and don't die on
                         // optional dep failure!
                         return $this->_downloader->_getPackageDownloadUrl(array('package' => $pname['package'], 'channel' => $pname['channel'], 'version' => $info['version']));
                     }
                     $vs = PEAR_Dependency2::_getExtraString($pname);
                 }
             } else {
                 $vs = ' within preferred state "' . $this->_downloader->config->get('preferred_state') . '"';
             }
             $options = $this->_downloader->getOptions();
             // this is only set by the "download-all" command
             if (isset($options['ignorepreferred_state'])) {
                 $err = PEAR::raiseError('Failed to download ' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package']), true) . $vs . ', latest release is version ' . $info['version'] . ', stability "' . $info['info']->getState() . '", use "' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package'], 'version' => $info['version'])) . '" to install', PEAR_DOWNLOADER_PACKAGE_STATE);
                 return $err;
             }
             // Checks if the user has a package installed already and checks the release against
             // the state against the installed package, this allows upgrades for packages
             // with lower stability than the preferred_state
             $stability = $this->_registry->packageInfo($pname['package'], 'stability', $pname['channel']);
             if (!$this->isInstalled($info) || !in_array($info['info']->getState(), PEAR_Common::betterStates($stability['release'], true))) {
                 $err = PEAR::raiseError('Failed to download ' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package']), true) . $vs . ', latest release is version ' . $info['version'] . ', stability "' . $info['info']->getState() . '", use "' . $this->_registry->parsedPackageNameToString(array('channel' => $pname['channel'], 'package' => $pname['package'], 'version' => $info['version'])) . '" to install');
                 return $err;
             }
         }
     }
     if (isset($info['deprecated']) && $info['deprecated']) {
         $this->_downloader->log(0, 'WARNING: "' . $this->_registry->parsedPackageNameToString(array('channel' => $info['info']->getChannel(), 'package' => $info['info']->getPackage()), true) . '" is deprecated in favor of "' . $this->_registry->parsedPackageNameToString($info['deprecated'], true) . '"');
     }
     return $info;
 }
コード例 #6
0
 /**
  * Checks that the dependency is valid.
  *
  * @param  array   $dependency A dependency array
  *
  * @return Boolean true if the dependency is valid, false otherwise
  */
 protected function checkDependency($dependency)
 {
     $dependencyChecker = new PEAR_Dependency2($this->environment->getConfig(), array(), array('package' => '', 'channel' => ''));
     PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
     $e = $dependencyChecker->validatePackageDependency($dependency, true, array());
     PEAR::staticPopErrorHandling();
     if (PEAR::isError($e)) {
         return false;
     }
     return true;
 }
コード例 #7
0
ファイル: Installer.php プロジェクト: orcoliver/oneye
 /**
  * Uninstall a package
  *
  * This method removes all files installed by the application, and then
  * removes any empty directories.
  * @param string package name
  * @param array Command-line options.  Possibilities include:
  *
  *              - installroot: base installation dir, if not the default
  *              - register-only : update registry but don't remove files
  *              - nodeps: do not process dependencies of other packages to ensure
  *                        uninstallation does not break things
  */
 function uninstall($package, $options = array())
 {
     $installRoot = isset($options['installroot']) ? $options['installroot'] : '';
     $this->config->setInstallRoot($installRoot);
     $this->installroot = '';
     $this->_registry =& $this->config->getRegistry();
     if (is_object($package)) {
         $channel = $package->getChannel();
         $pkg = $package;
         $package = $pkg->getPackage();
     } else {
         $pkg = false;
         $info = $this->_registry->parsePackageName($package, $this->config->get('default_channel'));
         $channel = $info['channel'];
         $package = $info['package'];
     }
     $savechannel = $this->config->get('default_channel');
     $this->configSet('default_channel', $channel);
     if (!is_object($pkg)) {
         $pkg = $this->_registry->getPackage($package, $channel);
     }
     if (!$pkg) {
         $this->configSet('default_channel', $savechannel);
         return $this->raiseError($this->_registry->parsedPackageNameToString(array('channel' => $channel, 'package' => $package), true) . ' not installed');
     }
     if ($pkg->getInstalledBinary()) {
         // this is just an alias for a binary package
         return $this->_registry->deletePackage($package, $channel);
     }
     $filelist = $pkg->getFilelist();
     PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
     if (!class_exists('PEAR_Dependency2')) {
         require_once EYE_ROOT . '/' . SYSTEM_DIR . '/' . LIB_DIR . '/eyePear/PEAR/Dependency2.php';
     }
     $depchecker = new PEAR_Dependency2($this->config, $options, array('channel' => $channel, 'package' => $package), PEAR_VALIDATE_UNINSTALLING);
     $e = $depchecker->validatePackageUninstall($this);
     PEAR::staticPopErrorHandling();
     if (PEAR::isError($e)) {
         if (!isset($options['ignore-errors'])) {
             return $this->raiseError($e);
         }
         if (!isset($options['soft'])) {
             $this->log(0, 'WARNING: ' . $e->getMessage());
         }
     } elseif (is_array($e)) {
         if (!isset($options['soft'])) {
             $this->log(0, $e[0]);
         }
     }
     $this->pkginfo =& $pkg;
     // pretty much nothing happens if we are only registering the uninstall
     if (empty($options['register-only'])) {
         // {{{ Delete the files
         $this->startFileTransaction();
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
         if (PEAR::isError($err = $this->_deletePackageFiles($package, $channel))) {
             PEAR::popErrorHandling();
             $this->rollbackFileTransaction();
             $this->configSet('default_channel', $savechannel);
             if (!isset($options['ignore-errors'])) {
                 return $this->raiseError($err);
             }
             if (!isset($options['soft'])) {
                 $this->log(0, 'WARNING: ' . $err->getMessage());
             }
         } else {
             PEAR::popErrorHandling();
         }
         if (!$this->commitFileTransaction()) {
             $this->rollbackFileTransaction();
             if (!isset($options['ignore-errors'])) {
                 return $this->raiseError("uninstall failed");
             }
             if (!isset($options['soft'])) {
                 $this->log(0, 'WARNING: uninstall failed');
             }
         } else {
             $this->startFileTransaction();
             $dirtree = $pkg->getDirTree();
             if ($dirtree === false) {
                 $this->configSet('default_channel', $savechannel);
                 return $this->_registry->deletePackage($package, $channel);
             }
             // attempt to delete empty directories
             uksort($dirtree, array($this, '_sortDirs'));
             foreach ($dirtree as $dir => $notused) {
                 $this->addFileOperation('rmdir', array($dir));
             }
             if (!$this->commitFileTransaction()) {
                 $this->rollbackFileTransaction();
                 if (!isset($options['ignore-errors'])) {
                     return $this->raiseError("uninstall failed");
                 }
                 if (!isset($options['soft'])) {
                     $this->log(0, 'WARNING: uninstall failed');
                 }
             }
         }
         // }}}
     }
     $this->configSet('default_channel', $savechannel);
     // Register that the package is no longer installed
     return $this->_registry->deletePackage($package, $channel);
 }
コード例 #8
0
ファイル: Package.php プロジェクト: alex-k/velotur
 /**
  * @param array Parsed array from {@link PEAR_Registry::parsePackageName()} or a dependency
  *                     returned from getDepDownloadURL()
  */
 function isEqual($param)
 {
     if (is_object($param)) {
         $channel = $param->getChannel();
         $package = $param->getPackage();
         if ($param->getURI()) {
             $param = array('channel' => $param->getChannel(), 'package' => $param->getPackage(), 'version' => $param->getVersion(), 'uri' => $param->getURI());
         } else {
             $param = array('channel' => $param->getChannel(), 'package' => $param->getPackage(), 'version' => $param->getVersion());
         }
     } else {
         if (isset($param['uri'])) {
             $param['channel'] = '__uri';
             $param['package'] = $param['dep']['name'];
         }
         $package = isset($param['package']) ? $param['package'] : $param['info']->getPackage();
         $channel = isset($param['channel']) ? $param['channel'] : $param['info']->getChannel();
         if (isset($param['rel'])) {
             $newdep = PEAR_Dependency2::normalizeDep($param);
             $newdep = $newdep[0];
         } elseif (isset($param['min'])) {
             $newdep = $param;
         }
     }
     if (isset($newdep)) {
         if (!isset($newdep['min'])) {
             $newdep['min'] = '0';
         }
         if (!isset($newdep['max'])) {
             $newdep['max'] = '100000000000000000000';
         }
         return $package == $this->getPackage() && $channel == $this->getChannel() && version_compare($newdep['min'], $this->getVersion(), '<=') && version_compare($newdep['max'], $this->getVersion(), '>=');
     }
     // use magic to support pecl packages suddenly jumping to the pecl channel
     if ($channel == 'pecl.php.net' && $this->getChannel() == 'pear.php.net') {
         if ($package == $this->getPackage()) {
             $channel = 'pear.php.net';
         }
     }
     if (isset($param['version'])) {
         return $package == $this->getPackage() && $channel == $this->getChannel() && $param['version'] == $this->getVersion();
     } else {
         return $package == $this->getPackage() && $channel == $this->getChannel();
     }
 }