cvs: php-src /pear/PEAR Installer.php

From: 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; }

« previous php.pear.cvs (#13171) next »