cvs: php-src /pear/PEAR Installer.php
| From: | Greg Beaver | Date: | Mon, 29 Sep 2003 17:36:01 +0000 |
| Subject: | cvs: php-src /pear/PEAR Installer.php | ||
| Groups: | php.pear.cvs | ||
| Request: | Send a blank email to pear-cvs+get-13171@lists.php.net to get a copy of this message | ||
cellog Mon Sep 29 13:36:01 2003 EDT
Modified files:
/php-src/pear/PEAR Installer.php
Log:
Bug #45 preferred_state works incorrectly
Index: php-src/pear/PEAR/Installer.php
diff -u php-src/pear/PEAR/Installer.php:1.128 php-src/pear/PEAR/Installer.php:1.129
--- php-src/pear/PEAR/Installer.php:1.128 Thu Sep 18 00:32:56 2003
+++ php-src/pear/PEAR/Installer.php Mon Sep 29 13:36:00 2003
@@ -18,7 +18,7 @@
// | Martin Jansen <mj@php.net> |
// +----------------------------------------------------------------------+
//
-// $Id: Installer.php,v 1.128 2003/09/18 04:32:56 cellog Exp $
+// $Id: Installer.php,v 1.129 2003/09/29 17:36:00 cellog Exp $
require_once 'PEAR/Common.php';
require_once 'PEAR/Registry.php';
@@ -28,6 +28,7 @@
define('PEAR_INSTALLER_OK', 1);
define('PEAR_INSTALLER_FAILED', 0);
define('PEAR_INSTALLER_SKIPPED', -1);
+define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
/**
* Administration class used to install PEAR packages and maintain the
@@ -583,6 +584,7 @@
* @param string version/state
* @param string original value passed to command-line
* @param string preferred state (snapshot/devel/alpha/beta/stable)
+ * @return null|PEAR_Error|string
* @access private
*/
function _downloadFile($pkgfile, &$config, $options, &$errors, $version,
@@ -637,7 +639,8 @@
return $this->raiseError('No releases of preferred state
"'
. $state . '" exist for package ' . $origpkgfile .
'. Use ' . $origpkgfile . '-state to install
another' .
- ' state (like ' . $origpkgfile .'-beta)');
+ ' state (like ' . $origpkgfile .'-beta)',
+ PEAR_INSTALLER_ERROR_NO_PREF_STATE);
}
} else {
return $pkgfile;
@@ -708,9 +711,11 @@
if (!is_file($pkgfile)) {
$origpkgfile = $pkgfile;
$pkgfile = $this->extractDownloadFileName($pkgfile, $version);
+ $version_is_state = false;
if ($version === null) {
// use preferred state if no version number was specified
$version = $state;
+ $version_is_state = true;
}
if ($this->validPackageName($pkgfile) &&
!isset($options['upgrade'])) {
if ($this->registry->packageExists($pkgfile)) {
@@ -719,10 +724,44 @@
continue;
}
}
- $pkgfile = $this->_downloadFile($pkgfile, $config, $options, $errors,
- $version, $origpkgfile, $state);
- if (PEAR::isError($pkgfile)) {
- return $pkgfile;
+ if ($version_is_state) {
+ $savepkgfile = $pkgfile;
+ PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+ $pkgfile = $this->_downloadFile($pkgfile, $config, $options,
+ $errors, $version, $origpkgfile,
+ $state);
+ PEAR::popErrorHandling();
+ if (PEAR::isError($pkgfile) &&
+ $pkgfile->getCode() != PEAR_INSTALLER_ERROR_NO_PREF_STATE) {
+ return $pkgfile;
+ } elseif (PEAR::isError($pkgfile)) {
+ $pkgfile = $savepkgfile;
+ $states = $this->betterStates($state, false);
+ $init = true;
+ // try from stable down to preferred_state
+ while(($init || (PEAR::isError($pkgfile) &&
+ $pkgfile->getCode() == PEAR_INSTALLER_ERROR_NO_PREF_STATE))
+ && count($states)) {
+ $pkgfile = $savepkgfile;
+ $init = false;
+ $nextstate = array_pop($states);
+ PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+ $pkgfile = $this->_downloadFile($pkgfile, $config, $options,
+ $errors, $nextstate, $origpkgfile,
+ $state);
+ PEAR::popErrorHandling();
+ }
+ if (PEAR::isError($pkgfile)) {
+ return $pkgfile;
+ }
+ }
+ } else {
+ $pkgfile = $this->_downloadFile($pkgfile, $config, $options,
+ $errors, $version, $origpkgfile,
+ $state);
+ if (PEAR::isError($pkgfile)) {
+ return $pkgfile;
+ }
}
}
$tempinfo = $this->infoFromAny($pkgfile);
@@ -867,7 +906,7 @@
* - alldeps : install all dependencies
* - onlyreqdeps : install only required dependencies
*
- * @return array package info if successful, null if not
+ * @return array|PEAR_Error package info if successful
*/
function install($pkgfile, $options = array())
@@ -1101,6 +1140,7 @@
return $this->raiseError("commit failed", PEAR_INSTALLER_FAILED);
}
+ $ret = false;
// Register that the package is installed -----------------------
if (empty($options['upgrade'])) {
// if 'force' is used, replace the info in registry
@@ -1117,7 +1157,7 @@
}
}
if (!$ret) {
- return null;
+ return $this->raiseError("Adding package $pkgname to registry failed");
}
return $pkginfo;
}