5,19 → 5,12 |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category pear |
* @package PEAR |
* @author Stig Bakken <ssb@php.net> |
* @author Greg Beaver <cellog@php.net> |
* @copyright 1997-2006 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: Remote.php,v 1.96 2006/09/24 03:08:57 cellog Exp $ |
* @copyright 1997-2009 The Authors |
* @license http://opensource.org/licenses/bsd-license.php New BSD License |
* @link http://pear.php.net/package/PEAR |
* @since File available since Release 0.1 |
*/ |
35,16 → 28,14 |
* @package PEAR |
* @author Stig Bakken <ssb@php.net> |
* @author Greg Beaver <cellog@php.net> |
* @copyright 1997-2006 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: 1.5.1 |
* @copyright 1997-2009 The Authors |
* @license http://opensource.org/licenses/bsd-license.php New BSD License |
* @version Release: 1.10.1 |
* @link http://pear.php.net/package/PEAR |
* @since Class available since Release 0.1 |
*/ |
class PEAR_Command_Remote extends PEAR_Command_Common |
{ |
// {{{ command definitions |
|
var $commands = array( |
'remote-info' => array( |
'summary' => 'Information About Remote Packages', |
58,7 → 49,12 |
'summary' => 'List Available Upgrades', |
'function' => 'doListUpgrades', |
'shortcut' => 'lu', |
'options' => array(), |
'options' => array( |
'channelinfo' => array( |
'shortopt' => 'i', |
'doc' => 'output fully channel-aware data, even on failure', |
), |
), |
'doc' => '[preferred_state] |
List releases on the server of packages you have installed where |
a newer version is available with the same release state (stable etc.) |
90,7 → 86,15 |
'shortopt' => 'c', |
'doc' => 'specify a channel other than the default channel', |
'arg' => 'CHAN', |
) |
), |
'allchannels' => array( |
'shortopt' => 'a', |
'doc' => 'search packages from all known channels', |
), |
'channelinfo' => array( |
'shortopt' => 'i', |
'doc' => 'output fully channel-aware data, even on failure', |
), |
), |
'doc' => '[packagename] [packageinfo] |
Lists all packages which match the search parameters. The first |
108,7 → 112,11 |
'shortopt' => 'c', |
'doc' => 'specify a channel other than the default channel', |
'arg' => 'CHAN', |
) |
), |
'channelinfo' => array( |
'shortopt' => 'i', |
'doc' => 'output fully channel-aware data, even on failure', |
), |
), |
'doc' => ' |
Lists the packages available on the configured server along with the |
135,27 → 143,22 |
'shortcut' => 'cc', |
'options' => array(), |
'doc' => ' |
Clear the XML-RPC/REST cache. See also the cache_ttl configuration |
Clear the REST cache. See also the cache_ttl configuration |
parameter. |
', |
), |
); |
|
// }}} |
// {{{ constructor |
|
/** |
* PEAR_Command_Remote constructor. |
* |
* @access public |
*/ |
function PEAR_Command_Remote(&$ui, &$config) |
function __construct(&$ui, &$config) |
{ |
parent::PEAR_Command_Common($ui, $config); |
parent::__construct($ui, $config); |
} |
|
// }}} |
|
function _checkChannelForStatus($channel, $chan) |
{ |
if (PEAR::isError($chan)) { |
167,18 → 170,18 |
} |
$rest = new PEAR_REST($this->config); |
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); |
$mirror = $this->config->get('preferred_mirror', null, |
$channel); |
$a = $rest->downloadHttp('http://' . $channel . |
'/channel.xml', $chan->lastModified()); |
PEAR::staticPopErrorHandling(); |
if (!PEAR::isError($a) && $a) { |
$this->ui->outputData('WARNING: channel "' . $channel . '" has ' . |
'updated its protocols, use "channel-update ' . $channel . |
'updated its protocols, use "' . PEAR_RUNTYPE . ' channel-update ' . $channel . |
'" to update'); |
} |
} |
|
// {{{ doRemoteInfo() |
|
function doRemoteInfo($command, $options, $params) |
{ |
if (sizeof($params) != 1) { |
191,7 → 194,7 |
if (PEAR::isError($parsed)) { |
return $this->raiseError('Invalid package name "' . $package . '"'); |
} |
|
|
$channel = $parsed['channel']; |
$this->config->set('default_channel', $channel); |
$chan = $reg->getChannel($channel); |
198,18 → 201,22 |
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) { |
return $e; |
} |
if ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) { |
|
$mirror = $this->config->get('preferred_mirror'); |
if ($chan->supportsREST($mirror) && $base = $chan->getBaseURL('REST1.0', $mirror)) { |
$rest = &$this->config->getREST('1.0', array()); |
$info = $rest->packageInfo($base, $parsed['package']); |
} else { |
$r = &$this->config->getRemote(); |
$info = $r->call('package.info', $parsed['package']); |
$info = $rest->packageInfo($base, $parsed['package'], $channel); |
} |
|
if (!isset($info)) { |
return $this->raiseError('No supported protocol was found'); |
} |
|
if (PEAR::isError($info)) { |
$this->config->set('default_channel', $savechannel); |
return $this->raiseError($info); |
} |
|
if (!isset($info['name'])) { |
return $this->raiseError('No remote package "' . $package . '" was found'); |
} |
226,9 → 233,6 |
return true; |
} |
|
// }}} |
// {{{ doRemoteList() |
|
function doRemoteList($command, $options, $params) |
{ |
$savechannel = $channel = $this->config->get('default_channel'); |
235,54 → 239,55 |
$reg = &$this->config->getRegistry(); |
if (isset($options['channel'])) { |
$channel = $options['channel']; |
if ($reg->channelExists($channel)) { |
$this->config->set('default_channel', $channel); |
} else { |
if (!$reg->channelExists($channel)) { |
return $this->raiseError('Channel "' . $channel . '" does not exist'); |
} |
|
$this->config->set('default_channel', $channel); |
} |
|
$chan = $reg->getChannel($channel); |
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) { |
return $e; |
} |
|
$list_options = false; |
if ($this->config->get('preferred_state') == 'stable') { |
$list_options = true; |
} |
|
$available = array(); |
if ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) { |
$base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror')) |
) { |
// use faster list-all if available |
$rest = &$this->config->getREST('1.1', array()); |
$available = $rest->listAll($base, $list_options); |
$available = $rest->listAll($base, $list_options, true, false, false, $chan->getName()); |
} elseif ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) { |
$rest = &$this->config->getREST('1.0', array()); |
$available = $rest->listAll($base, $list_options); |
} else { |
$r = &$this->config->getRemote(); |
if ($channel == 'pear.php.net') { |
// hack because of poor pearweb design |
$available = $r->call('package.listAll', true, $list_options, false); |
} else { |
$available = $r->call('package.listAll', true, $list_options); |
} |
$available = $rest->listAll($base, $list_options, true, false, false, $chan->getName()); |
} |
|
if (PEAR::isError($available)) { |
$this->config->set('default_channel', $savechannel); |
return $this->raiseError($available); |
} |
|
$i = $j = 0; |
$data = array( |
'caption' => 'Channel ' . $channel . ' Available packages:', |
'border' => true, |
'headline' => array('Package', 'Version'), |
'channel' => $channel |
); |
if (count($available)==0) { |
|
if (count($available) == 0) { |
$data = '(no packages available yet)'; |
} else { |
foreach ($available as $name => $info) { |
$data['data'][] = array($name, (isset($info['stable']) && $info['stable']) |
? $info['stable'] : '-n/a-'); |
$version = (isset($info['stable']) && $info['stable']) ? $info['stable'] : '-n/a-'; |
$data['data'][] = array($name, $version); |
} |
} |
$this->ui->outputData($data, $command); |
290,9 → 295,6 |
return true; |
} |
|
// }}} |
// {{{ doListAll() |
|
function doListAll($command, $options, $params) |
{ |
$savechannel = $channel = $this->config->get('default_channel'); |
299,47 → 301,52 |
$reg = &$this->config->getRegistry(); |
if (isset($options['channel'])) { |
$channel = $options['channel']; |
if ($reg->channelExists($channel)) { |
$this->config->set('default_channel', $channel); |
} else { |
if (!$reg->channelExists($channel)) { |
return $this->raiseError("Channel \"$channel\" does not exist"); |
} |
|
$this->config->set('default_channel', $channel); |
} |
|
$list_options = false; |
if ($this->config->get('preferred_state') == 'stable') { |
$list_options = true; |
} |
|
$chan = $reg->getChannel($channel); |
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) { |
return $e; |
} |
|
if ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) { |
// use faster list-all if available |
$rest = &$this->config->getREST('1.1', array()); |
$available = $rest->listAll($base, $list_options, false); |
$available = $rest->listAll($base, $list_options, false, false, false, $chan->getName()); |
} elseif ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) { |
$rest = &$this->config->getREST('1.0', array()); |
$available = $rest->listAll($base, $list_options, false); |
} else { |
$r = &$this->config->getRemote(); |
if ($channel == 'pear.php.net') { |
// hack because of poor pearweb design |
$available = $r->call('package.listAll', true, $list_options, false); |
} else { |
$available = $r->call('package.listAll', true, $list_options); |
} |
$available = $rest->listAll($base, $list_options, false, false, false, $chan->getName()); |
} |
|
if (PEAR::isError($available)) { |
$this->config->set('default_channel', $savechannel); |
return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "' . $available->getMessage() . '")'); |
} |
|
$data = array( |
'caption' => 'All packages:', |
'caption' => 'All packages [Channel ' . $channel . ']:', |
'border' => true, |
'headline' => array('Package', 'Latest', 'Local'), |
'channel' => $channel, |
); |
|
if (isset($options['channelinfo'])) { |
// add full channelinfo |
$data['caption'] = 'Channel ' . $channel . ' All packages:'; |
$data['headline'] = array('Channel', 'Package', 'Latest', 'Local', |
'Description', 'Dependencies'); |
} |
$local_pkgs = $reg->listPackages($channel); |
|
foreach ($available as $name => $info) { |
373,13 → 380,39 |
if (isset($info['stable']) && !$info['stable']) { |
$info['stable'] = null; |
} |
$data['data'][$info['category']][] = array( |
$reg->channelAlias($channel) . '/' . $name, |
isset($info['stable']) ? $info['stable'] : null, |
isset($installed['version']) ? $installed['version'] : null, |
isset($desc) ? $desc : null, |
isset($info['deps']) ? $info['deps'] : null, |
|
if (isset($options['channelinfo'])) { |
// add full channelinfo |
if ($info['stable'] === $info['unstable']) { |
$state = $info['state']; |
} else { |
$state = 'stable'; |
} |
$latest = $info['stable'].' ('.$state.')'; |
$local = ''; |
if (isset($installed['version'])) { |
$inst_state = $reg->packageInfo($name, 'release_state', $channel); |
$local = $installed['version'].' ('.$inst_state.')'; |
} |
|
$packageinfo = array( |
$channel, |
$name, |
$latest, |
$local, |
isset($desc) ? $desc : null, |
isset($info['deps']) ? $info['deps'] : null, |
); |
} else { |
$packageinfo = array( |
$reg->channelAlias($channel) . '/' . $name, |
isset($info['stable']) ? $info['stable'] : null, |
isset($installed['version']) ? $installed['version'] : null, |
isset($desc) ? $desc : null, |
isset($info['deps']) ? $info['deps'] : null, |
); |
} |
$data['data'][$info['category']][] = $packageinfo; |
} |
|
if (isset($options['mode']) && in_array($options['mode'], array('notinstalled', 'upgrades'))) { |
387,6 → 420,7 |
$this->ui->outputData($data, $command); |
return true; |
} |
|
foreach ($local_pkgs as $name) { |
$info = &$reg->getPackage($name, $channel); |
$data['data']['Local'][] = array( |
403,9 → 437,6 |
return true; |
} |
|
// }}} |
// {{{ doSearch() |
|
function doSearch($command, $options, $params) |
{ |
if ((!isset($params[0]) || empty($params[0])) |
412,47 → 443,94 |
&& (!isset($params[1]) || empty($params[1]))) |
{ |
return $this->raiseError('no valid search string supplied'); |
}; |
} |
|
$channelinfo = isset($options['channelinfo']); |
$reg = &$this->config->getRegistry(); |
if (isset($options['allchannels'])) { |
// search all channels |
unset($options['allchannels']); |
$channels = $reg->getChannels(); |
$errors = array(); |
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); |
foreach ($channels as $channel) { |
if ($channel->getName() != '__uri') { |
$options['channel'] = $channel->getName(); |
$ret = $this->doSearch($command, $options, $params); |
if (PEAR::isError($ret)) { |
$errors[] = $ret; |
} |
} |
} |
|
PEAR::staticPopErrorHandling(); |
if (count($errors) !== 0) { |
// for now, only give first error |
return PEAR::raiseError($errors[0]); |
} |
|
return true; |
} |
|
$savechannel = $channel = $this->config->get('default_channel'); |
$reg = &$this->config->getRegistry(); |
$package = $params[0]; |
$package = strtolower($params[0]); |
$summary = isset($params[1]) ? $params[1] : false; |
if (isset($options['channel'])) { |
$reg = &$this->config->getRegistry(); |
$channel = $options['channel']; |
if ($reg->channelExists($channel)) { |
$this->config->set('default_channel', $channel); |
} else { |
if (!$reg->channelExists($channel)) { |
return $this->raiseError('Channel "' . $channel . '" does not exist'); |
} |
|
$this->config->set('default_channel', $channel); |
} |
|
$chan = $reg->getChannel($channel); |
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) { |
return $e; |
} |
|
if ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) { |
$rest = &$this->config->getREST('1.0', array()); |
$available = $rest->listAll($base, false, false, $package, $summary); |
} else { |
$r = &$this->config->getRemote(); |
$available = $r->call('package.search', $package, $summary, true, |
$this->config->get('preferred_state') == 'stable', true); |
$available = $rest->listAll($base, false, false, $package, $summary, $chan->getName()); |
} |
|
if (PEAR::isError($available)) { |
$this->config->set('default_channel', $savechannel); |
return $this->raiseError($available); |
} |
if (!$available) { |
return $this->raiseError('no packages found that match pattern "' . $package . '"'); |
|
if (!$available && !$channelinfo) { |
// clean exit when not found, no error ! |
$data = 'no packages found that match pattern "' . $package . '", for channel '.$channel.'.'; |
$this->ui->outputData($data); |
$this->config->set('default_channel', $channel); |
return true; |
} |
$data = array( |
'caption' => 'Matched packages, channel ' . $channel . ':', |
'border' => true, |
'headline' => array('Package', 'Stable/(Latest)', 'Local'), |
); |
|
if ($channelinfo) { |
$data = array( |
'caption' => 'Matched packages, channel ' . $channel . ':', |
'border' => true, |
'headline' => array('Channel', 'Package', 'Stable/(Latest)', 'Local'), |
'channel' => $channel |
); |
} else { |
$data = array( |
'caption' => 'Matched packages, channel ' . $channel . ':', |
'border' => true, |
'headline' => array('Package', 'Stable/(Latest)', 'Local'), |
'channel' => $channel |
); |
} |
|
if (!$available && $channelinfo) { |
unset($data['headline']); |
$data['data'] = 'No packages found that match pattern "' . $package . '".'; |
$available = array(); |
} |
|
foreach ($available as $name => $info) { |
$installed = $reg->packageInfo($name, null, $channel); |
$desc = $info['summary']; |
459,37 → 537,50 |
if (isset($params[$name])) |
$desc .= "\n\n".$info['description']; |
|
$unstable = ''; |
if ($info['unstable']) { |
$unstable = '/(' . $info['unstable'] . ' ' . $info['state'] . ')'; |
} |
if (!isset($info['stable']) || !$info['stable']) { |
$info['stable'] = 'none'; |
$version_remote = 'none'; |
} else { |
if ($info['unstable']) { |
$version_remote = $info['unstable']; |
} else { |
$version_remote = $info['stable']; |
} |
$version_remote .= ' ('.$info['state'].')'; |
} |
$version = is_array($installed['version']) ? $installed['version']['release'] : |
$installed['version']; |
$data['data'][$info['category']][] = array( |
$name, |
$info['stable'] . $unstable, |
$version, |
$desc, |
if ($channelinfo) { |
$packageinfo = array( |
$channel, |
$name, |
$version_remote, |
$version, |
$desc, |
); |
} else { |
$packageinfo = array( |
$name, |
$version_remote, |
$version, |
$desc, |
); |
} |
$data['data'][$info['category']][] = $packageinfo; |
} |
|
$this->ui->outputData($data, $command); |
$this->config->set('default_channel', $channel); |
return true; |
} |
|
// }}} |
function &getDownloader($options) |
{ |
if (!class_exists('PEAR_Downloader')) { |
require_once 'PEAR/Downloader.php'; |
} |
$a = &new PEAR_Downloader($this->ui, $options, $this->config); |
$a = new PEAR_Downloader($this->ui, $options, $this->config); |
return $a; |
} |
// {{{ doDownload() |
|
function doDownload($command, $options, $params) |
{ |
503,7 → 594,13 |
// eliminate error messages for preferred_state-related errors |
|
$downloader = &$this->getDownloader($options); |
$downloader->setDownloadDir(getcwd()); |
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); |
$e = $downloader->setDownloadDir(getcwd()); |
PEAR::staticPopErrorHandling(); |
if (PEAR::isError($e)) { |
return $this->raiseError('Current directory is not writeable, cannot download'); |
} |
|
$errors = array(); |
$downloaded = array(); |
$err = $downloader->download($params); |
510,17 → 607,23 |
if (PEAR::isError($err)) { |
return $err; |
} |
|
$errors = $downloader->getErrorMsgs(); |
if (count($errors)) { |
foreach ($errors as $error) { |
$this->ui->outputData($error); |
if ($error !== null) { |
$this->ui->outputData($error); |
} |
} |
|
return $this->raiseError("$command failed"); |
} |
|
$downloaded = $downloader->getDownloadedPackages(); |
foreach ($downloaded as $pkg) { |
$this->ui->outputData("File $pkg[file] downloaded", $command); |
} |
|
return true; |
} |
|
531,9 → 634,6 |
} |
} |
|
// }}} |
// {{{ doListUpgrades() |
|
function doListUpgrades($command, $options, $params) |
{ |
require_once 'PEAR/Common.php'; |
540,6 → 640,7 |
if (isset($params[0]) && !is_array(PEAR_Common::betterStates($params[0]))) { |
return $this->raiseError($params[0] . ' is not a valid state (stable/beta/alpha/devel/etc.) try "pear help list-upgrades"'); |
} |
|
$savechannel = $channel = $this->config->get('default_channel'); |
$reg = &$this->config->getRegistry(); |
foreach ($reg->listChannels() as $channel) { |
547,56 → 648,66 |
if (!count($inst)) { |
continue; |
} |
|
if ($channel == '__uri') { |
continue; |
} |
|
$this->config->set('default_channel', $channel); |
if (empty($params[0])) { |
$state = $this->config->get('preferred_state'); |
} else { |
$state = $params[0]; |
} |
$state = empty($params[0]) ? $this->config->get('preferred_state') : $params[0]; |
|
$caption = $channel . ' Available Upgrades'; |
$chan = $reg->getChannel($channel); |
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) { |
return $e; |
} |
if ($chan->supportsREST($this->config->get('preferred_mirror')) && |
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) { |
$rest = &$this->config->getREST('1.0', array()); |
|
$latest = array(); |
$base2 = false; |
$preferred_mirror = $this->config->get('preferred_mirror'); |
if ($chan->supportsREST($preferred_mirror) && |
( |
($base2 = $chan->getBaseURL('REST1.3', $preferred_mirror)) |
|| ($base = $chan->getBaseURL('REST1.0', $preferred_mirror)) |
) |
|
) { |
if ($base2) { |
$rest = &$this->config->getREST('1.3', array()); |
$base = $base2; |
} else { |
$rest = &$this->config->getREST('1.0', array()); |
} |
|
if (empty($state) || $state == 'any') { |
$state = false; |
} else { |
$caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')'; |
} |
|
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); |
$latest = $rest->listLatestUpgrades($base, $state, $inst, $channel, $reg); |
PEAR::staticPopErrorHandling(); |
} else { |
$remote = &$this->config->getRemote(); |
$remote->pushErrorHandling(PEAR_ERROR_RETURN); |
if (empty($state) || $state == 'any') { |
$latest = $remote->call("package.listLatestReleases"); |
} else { |
$latest = $remote->call("package.listLatestReleases", $state); |
$caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')'; |
} |
$remote->popErrorHandling(); |
} |
|
if (PEAR::isError($latest)) { |
$this->ui->outputData($latest->getMessage()); |
continue; |
} |
|
$caption .= ':'; |
if (PEAR::isError($latest)) { |
$this->config->set('default_channel', $savechannel); |
return $latest; |
} |
|
$data = array( |
'caption' => $caption, |
'border' => 1, |
'headline' => array('Channel', 'Package', 'Local', 'Remote', 'Size'), |
'channel' => $channel |
); |
|
foreach ((array)$latest as $pkg => $info) { |
$package = strtolower($pkg); |
if (!isset($inst[$package])) { |
603,6 → 714,7 |
// skip packages we don't have installed |
continue; |
} |
|
extract($info); |
$inst_version = $reg->packageInfo($package, 'version', $channel); |
$inst_state = $reg->packageInfo($package, 'release_state', $channel); |
610,6 → 722,7 |
// installed version is up-to-date |
continue; |
} |
|
if ($filesize >= 20480) { |
$filesize += 1024 - ($filesize % 1024); |
$fs = sprintf("%dkB", $filesize / 1024); |
619,39 → 732,53 |
} else { |
$fs = " -"; // XXX center instead |
} |
|
$data['data'][] = array($channel, $pkg, "$inst_version ($inst_state)", "$version ($state)", $fs); |
} |
if (empty($data['data'])) { |
$this->ui->outputData('Channel ' . $channel . ': No upgrades available'); |
|
if (isset($options['channelinfo'])) { |
if (empty($data['data'])) { |
unset($data['headline']); |
if (count($inst) == 0) { |
$data['data'] = '(no packages installed)'; |
} else { |
$data['data'] = '(no upgrades available)'; |
} |
} |
$this->ui->outputData($data, $command); |
} else { |
$this->ui->outputData($data, $command); |
if (empty($data['data'])) { |
$this->ui->outputData('Channel ' . $channel . ': No upgrades available'); |
} else { |
$this->ui->outputData($data, $command); |
} |
} |
} |
|
$this->config->set('default_channel', $savechannel); |
return true; |
} |
|
// }}} |
// {{{ doClearCache() |
|
function doClearCache($command, $options, $params) |
{ |
$cache_dir = $this->config->get('cache_dir'); |
$verbose = $this->config->get('verbose'); |
$verbose = $this->config->get('verbose'); |
$output = ''; |
if (!file_exists($cache_dir) || !is_dir($cache_dir)) { |
return $this->raiseError("$cache_dir does not exist or is not a directory"); |
} |
|
if (!($dp = @opendir($cache_dir))) { |
return $this->raiseError("opendir($cache_dir) failed: $php_errormsg"); |
} |
|
if ($verbose >= 1) { |
$output .= "reading directory $cache_dir\n"; |
} |
|
$num = 0; |
while ($ent = readdir($dp)) { |
if (preg_match('/^xmlrpc_cache_[a-z0-9]{32}$/', $ent) || |
preg_match('/rest.cache(file|id)$/', $ent)) { |
if (preg_match('/rest.cache(file|id)\\z/', $ent)) { |
$path = $cache_dir . DIRECTORY_SEPARATOR . $ent; |
if (file_exists($path)) { |
$ok = @unlink($path); |
659,6 → 786,7 |
$ok = false; |
$php_errormsg = ''; |
} |
|
if ($ok) { |
if ($verbose >= 2) { |
$output .= "deleted $path\n"; |
669,15 → 797,13 |
} |
} |
} |
|
closedir($dp); |
if ($verbose >= 1) { |
$output .= "$num cache entries cleared\n"; |
} |
|
$this->ui->outputData(rtrim($output), $command); |
return $num; |
} |
|
// }}} |
} |
|
?> |