示例#1
0
 function updatePackage($package, $info, $merge = true)
 {
     if (is_object($info)) {
         return $this->updatePackage2($info, $merge);
     }
     if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
         return $e;
     }
     $ret = $this->_updatePackage($package, $info, $merge);
     $this->_unlock();
     if ($ret) {
         if (!class_exists('PEAR_PackageFile_v1')) {
             require_once 'PEAR/PackageFile/v1.php';
         }
         $pf = new PEAR_PackageFile_v1();
         $pf->setConfig($this->_config);
         $pf->fromArray($this->packageInfo($package));
         $this->_dependencyDB->uninstallPackage($pf);
         $this->_dependencyDB->installPackage($pf);
     }
     return $ret;
 }
示例#2
0
 /**
  * @param string contents of package.xml file, version 1.0
  * @return bool success of parsing
  */
 function parse($data, $file, $archive = false)
 {
     if (!extension_loaded('xml')) {
         return PEAR::raiseError('Cannot create xml parser for parsing package.xml, no xml extension');
     }
     $xp = @xml_parser_create();
     if (!$xp) {
         return PEAR::raiseError('Cannot create xml parser for parsing package.xml');
     }
     xml_set_object($xp, $this);
     xml_set_element_handler($xp, '_element_start_1_0', '_element_end_1_0');
     xml_set_character_data_handler($xp, '_pkginfo_cdata_1_0');
     xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
     $this->element_stack = array();
     $this->_packageInfo = array('provides' => array());
     $this->current_element = false;
     unset($this->dir_install);
     $this->_packageInfo['filelist'] = array();
     $this->filelist =& $this->_packageInfo['filelist'];
     $this->dir_names = array();
     $this->in_changelog = false;
     $this->d_i = 0;
     $this->cdata = '';
     $this->_isValid = true;
     if (!xml_parse($xp, $data, 1)) {
         $code = xml_get_error_code($xp);
         $line = xml_get_current_line_number($xp);
         xml_parser_free($xp);
         return PEAR::raiseError(sprintf("XML error: %s at line %d", $str = xml_error_string($code), $line), 2);
     }
     xml_parser_free($xp);
     $pf = new PEAR_PackageFile_v1();
     $pf->setConfig($this->_config);
     if (isset($this->_logger)) {
         $pf->setLogger($this->_logger);
     }
     $pf->setPackagefile($file, $archive);
     $pf->fromArray($this->_packageInfo);
     return $pf;
 }