/** * Attempt to discover a channel's remote capabilities from * its server name * @param string * @return boolean */ function discover($channel) { $this->log(1, 'Attempting to discover channel "' . $channel . '"...'); PEAR::pushErrorHandling(PEAR_ERROR_RETURN); $callback = $this->ui ? array(&$this, '_downloadCallback') : null; $a = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui, System::mktemp(array('-d')), $callback, false); PEAR::popErrorHandling(); if (PEAR::isError($a)) { return false; } list($a, $lastmodified) = $a; $b = new PEAR_ChannelFile(); if ($b->fromXmlFile($a)) { unlink($a); if ($this->config->get('auto_discover')) { $this->_registry->addChannel($b, $lastmodified); $alias = $b->getName(); if ($b->getName() == $this->_registry->channelName($b->getAlias())) { $alias = $b->getAlias(); } $this->log(1, 'Auto-discovered channel "' . $channel . '", alias "' . $alias . '", adding to registry'); } return true; } unlink($a); return false; }
/** * Attempt to discover a channel's remote capabilities from * its server name * @param string * @return boolean */ function discover($channel) { $this->log(1, 'Attempting to discover channel "' . $channel . '"...'); PEAR::pushErrorHandling(PEAR_ERROR_RETURN); $callback = $this->ui ? array(&$this, '_downloadCallback') : null; if (!class_exists('System')) { require_once 'System.php'; } $tmpdir = $this->config->get('temp_dir'); $tmp = System::mktemp('-d -t "' . $tmpdir . '"'); $a = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false); PEAR::popErrorHandling(); if (PEAR::isError($a)) { // Attempt to fallback to https automatically. PEAR::pushErrorHandling(PEAR_ERROR_RETURN); $this->log(1, 'Attempting fallback to https instead of http on channel "' . $channel . '"...'); $a = $this->downloadHttp('https://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false); PEAR::popErrorHandling(); if (PEAR::isError($a)) { return false; } } list($a, $lastmodified) = $a; if (!class_exists('PEAR_ChannelFile')) { require_once 'PEAR/ChannelFile.php'; } $b = new PEAR_ChannelFile(); if ($b->fromXmlFile($a)) { unlink($a); if ($this->config->get('auto_discover')) { $this->_registry->addChannel($b, $lastmodified); $alias = $b->getName(); if ($b->getName() == $this->_registry->channelName($b->getAlias())) { $alias = $b->getAlias(); } $this->log(1, 'Auto-discovered channel "' . $channel . '", alias "' . $alias . '", adding to registry'); } return true; } unlink($a); return false; }
/** * Set the output macros based on a channel source */ function _doMakeRPMFromChannel($source_file, $options, $params) { // Set the name of the template spec file to use by default $this->_template_spec_name = 'template-channel.spec'; // Create a PEAR_ChannelFile object if (!class_exists('PEAR_ChannelFile')) { require_once 'PEAR/ChannelFile.php'; } $cf = new PEAR_ChannelFile(); // Load in the channel.xml file from the source XML $cf->fromXmlFile($source_file); // Set the output macros $this->_output['channel_alias'] = $cf->getAlias(); $this->_output['master_server'] = $cf->getName(); $this->_output['possible_channel'] = $cf->getName(); $this->_output['rpm_package'] = $this->_getRPMName(null, $cf->getName(), $cf->getAlias(), 'chan'); $rpmdep = $this->_getRPMName(null, $cf->getName(), $cf->getAlias(), 'chandep'); if (!empty($rpmdep) && $rpmdep != $this->_output['rpm_package']) { $this->_output['extra_headers'] = $this->_formatRpmHeader('Provides', "{$rpmdep}") . "\n"; } // Channels don't really have version numbers; this will need to be // hand-maintained in the spec $this->_output['version'] = '1.0'; }