diff options
author | Greg Beaver <cellog@php.net> | 2003-08-29 20:50:36 +0000 |
---|---|---|
committer | Greg Beaver <cellog@php.net> | 2003-08-29 20:50:36 +0000 |
commit | dce426828277213bc23b60df31f52fdeec0d3b32 (patch) | |
tree | 866f9fcf0b997af063036d031546779e44281fc8 | |
parent | e18e3a6edde9e0308a12edbf3fbcdadab4010150 (diff) | |
download | php-git-dce426828277213bc23b60df31f52fdeec0d3b32.tar.gz |
fix optional dependencies in Dependency.php, remove ugly hack in Installer, add note about Cox's cool addition to pear install, remove noise of who did what from package.xml, fix #25008
-rw-r--r-- | pear/PEAR/Dependency.php | 40 | ||||
-rw-r--r-- | pear/PEAR/Installer.php | 14 | ||||
-rw-r--r-- | pear/package-PEAR.xml | 16 |
3 files changed, 56 insertions, 14 deletions
diff --git a/pear/PEAR/Dependency.php b/pear/PEAR/Dependency.php index 370270aa71..9fdf7dd7b1 100644 --- a/pear/PEAR/Dependency.php +++ b/pear/PEAR/Dependency.php @@ -26,6 +26,7 @@ define('PEAR_DEPENDENCY_CONFLICT', -2); define('PEAR_DEPENDENCY_UPGRADE_MINOR', -3); define('PEAR_DEPENDENCY_UPGRADE_MAJOR', -4); define('PEAR_DEPENDENCY_BAD_DEPENDENCY', -5); +define('PEAR_DEPENDENCY_MISSING_OPTIONAL', -6); /** * Dependency check for PEAR packages @@ -54,13 +55,16 @@ class PEAR_Dependency * This method maps the XML dependency definition to the * corresponding one from PEAR_Dependency * + * <pre> * $opts => Array * ( * [type] => pkg * [rel] => ge * [version] => 3.4 * [name] => HTML_Common + * [optional] => false * ) + * </pre> * * @param string Error message * @param array Options @@ -71,13 +75,15 @@ class PEAR_Dependency $rel = isset($opts['rel']) ? $opts['rel'] : 'has'; $req = isset($opts['version']) ? $opts['version'] : null; $name = isset($opts['name']) ? $opts['name'] : null; + $opt = (isset($opts['optional']) && $opts['optional'] == 'yes') ? + $opts['optional'] : null; $errmsg = ''; switch ($opts['type']) { case 'pkg': - return $this->checkPackage($errmsg, $name, $req, $rel); + return $this->checkPackage($errmsg, $name, $req, $rel, $opt); break; case 'ext': - return $this->checkExtension($errmsg, $name, $req, $rel); + return $this->checkExtension($errmsg, $name, $req, $rel, $opt); break; case 'php': return $this->checkPHP($errmsg, $req, $rel); @@ -105,10 +111,12 @@ class PEAR_Dependency * @param string $name Name of the package to test * @param string $version The package version required * @param string $relation How to compare versions with eachother + * @param bool $opt Whether the relationship is optional * * @return mixed bool false if no error or the error string */ - function checkPackage(&$errmsg, $name, $req = null, $relation = 'has') + function checkPackage(&$errmsg, $name, $req = null, $relation = 'has', + $opt = false) { if (substr($relation, 0, 2) == 'v.') { $relation = substr($relation, 2); @@ -116,6 +124,10 @@ class PEAR_Dependency switch ($relation) { case 'has': if (!$this->registry->packageExists($name)) { + if ($opt) { + $errmsg = "package `$name' is recommended to utilize some features."; + return PEAR_DEPENDENCY_MISSING_OPTIONAL; + } $errmsg = "requires package `$name'"; return PEAR_DEPENDENCY_MISSING; } @@ -136,10 +148,14 @@ class PEAR_Dependency if (!$this->registry->packageExists($name) || !version_compare("$version", "$req", $relation)) { + $code = $this->codeFromRelation($relation, $version, $req); + if ($opt) { + $errmsg = "package `$name' version $req is recommended to utilize some features."; + return PEAR_DEPENDENCY_MISSING_OPTIONAL; + } $errmsg = "requires package `$name' " . $this->signOperator($relation) . " $req"; - $code = $this->codeFromRelation($relation, $version, $req); - return PEAR_DEPENDENCY_MISSING; + return $code; } return false; } @@ -187,13 +203,19 @@ class PEAR_Dependency * @param string $name Name of the extension to test * @param string $req_ext_ver Required extension version to compare with * @param string $relation How to compare versions with eachother + * @param bool $opt Whether the relationship is optional * * @return mixed bool false if no error or the error string */ - function checkExtension(&$errmsg, $name, $req = null, $relation = 'has') + function checkExtension(&$errmsg, $name, $req = null, $relation = 'has', + $opt = false) { // XXX (ssb): could we avoid loading the extension here? if (!PEAR::loadExtension($name)) { + if ($opt) { + $errmsg = "'$name' PHP extension is recommended to utilize some features"; + return PEAR_DEPENDENCY_MISSING_OPTIONAL; + } $errmsg = "'$name' PHP extension is not installed"; return PEAR_DEPENDENCY_MISSING; } @@ -207,9 +229,13 @@ class PEAR_Dependency // Force params to be strings, otherwise the comparation will fail (ex. 0.9==0.90) settype($req, "string"); if (!version_compare("$ext_ver", "$req", $operator)) { - $retval = "'$name' PHP extension version " . + $errmsg = "'$name' PHP extension version " . $this->signOperator($operator) . " $req is required"; $code = $this->codeFromRelation($relation, $ext_ver, $req); + if ($opt) { + $errmsg = "'$name' PHP extension version $req is recommended to utilize some features"; + return PEAR_DEPENDENCY_MISSING_OPTIONAL; + } } } return $code; diff --git a/pear/PEAR/Installer.php b/pear/PEAR/Installer.php index 0ca07c15a6..efb28e41fd 100644 --- a/pear/PEAR/Installer.php +++ b/pear/PEAR/Installer.php @@ -222,6 +222,10 @@ class PEAR_Installer extends PEAR_Common $this->log(3, "+ mkdir $dest_dir"); } if (empty($atts['replacements'])) { + if (!file_exists($orig_file)) { + return $this->raiseError("file does not exist", + PEAR_INSTALLER_FAILED); + } if (!@copy($orig_file, $dest_file)) { return $this->raiseError("failed to write $dest_file", PEAR_INSTALLER_FAILED); @@ -231,6 +235,10 @@ class PEAR_Installer extends PEAR_Common $md5sum = md5_file($dest_file); } } else { + if (!file_exists($orig_file)) { + return $this->raiseError("file does not exist", + PEAR_INSTALLER_FAILED); + } $fp = fopen($orig_file, "r"); $contents = fread($fp, filesize($orig_file)); fclose($fp); @@ -906,6 +914,9 @@ class PEAR_Installer extends PEAR_Common if (PEAR::isError($res)) { if (empty($options['ignore-errors'])) { $this->rollbackFileTransaction(); + if ($res->getMessage() == "file does not exist") { + $this->raiseError("file $file in package.xml does not exist"); + } return $this->raiseError($res); } else { $this->log(0, "Warning: " . $res->getMessage()); @@ -1041,10 +1052,11 @@ class PEAR_Installer extends PEAR_Common $code = $depchecker->callCheckMethod($error, $dep); if ($code) { if (isset($dep['optional']) && $dep['optional'] == 'yes') { +/* die ugly hack die // Ugly hack to adjust the error messages $error = str_replace('requires ', '', $error); $error = ucfirst($error); - $error = $error . ' is recommended to utilize some features.'; + $error = $error . ' is recommended to utilize some features.';*/ $optional_deps[] = array($dep, $code, $error); } else { $failed_deps[] = array($dep, $code, $error); diff --git a/pear/package-PEAR.xml b/pear/package-PEAR.xml index bbf22e8fcd..efc1567681 100644 --- a/pear/package-PEAR.xml +++ b/pear/package-PEAR.xml @@ -50,17 +50,21 @@ * Fixed #25131 - OS_Guess warnings on empty lines from popen("/usr/bin/cpp $tmpfile", "r"); * Fixed #25117 - MD5 checksum should be case-insensitive -* Fixed static calls to PEAR error-handling methods in classes (Greg) +* Fixed static calls to PEAR error-handling methods in classes * Added ability to use a static method callback for error-handling, and removed -use of inadvisable @ in setErrorHandling (Greg) -* Added dependency on XML_RPC, and optional dependency on xmlrpc extension (Greg) -* Added --alldeps and --onlyreqdeps options to pear install/pear upgrade (Greg) +use of inadvisable @ in setErrorHandling +* Added dependency on XML_RPC, and optional dependency on xmlrpc extension +* Added --alldeps and --onlyreqdeps options to pear install/pear upgrade * Sorting of installation/uninstallation so package order on the command-line is - insignificant (fixes upgrade-all if every package is installed) (Greg) + insignificant (fixes upgrade-all if every package is installed) * pear upgrade will now install if the package is not installed (necessary for pear upgrade --alldeps, as installation is often necessary for new - dependencies) (Greg) + dependencies) * fixed pear.bat if PHP is installed in a path like C:\Program Files\php (Greg) +* Add ability to specify pear install DB-1.2, or pear install DB-stable, or + pear install DB-1.2.tar to download as uncompressed tar +* Fix #25008 - unhelpful error message +* Fixed optional dependencies in Dependency.php </notes> <provides type="class" name="OS_Guess" /> <provides type="class" name="System" /> |