Пример #1
0
 /**
  * Test whether a file or set of files belongs to a package.
  *
  * If an array is passed in
  * @param string|array file path, absolute or relative to the pear
  *                     install dir
  * @param string|array name of PEAR package or array('package' => name, 'channel' =>
  *                     channel) of a package that will be ignored
  * @param string API version - 1.1 will exclude any files belonging to a package
  * @param array private recursion variable
  * @return array|false which package and channel the file belongs to, or an empty
  *                     string if the file does not belong to an installed package,
  *                     or belongs to the second parameter's package
  */
 function checkFileMap($path, $package = false, $api = '1.0', $attrs = false)
 {
     if (is_array($path)) {
         static $notempty;
         if (empty($notempty)) {
             if (!class_exists('PEAR_Installer_Role')) {
                 require_once 'PEAR/Installer/Role.php';
             }
             $notempty = create_function('$a', 'return !empty($a);');
         }
         $package = is_array($package) ? array(strtolower($package[0]), strtolower($package[1])) : strtolower($package);
         $pkgs = array();
         foreach ($path as $name => $attrs) {
             if (is_array($attrs)) {
                 if (isset($attrs['install-as'])) {
                     $name = $attrs['install-as'];
                 }
                 if (!in_array($attrs['role'], PEAR_Installer_Role::getInstallableRoles())) {
                     // these are not installed
                     continue;
                 }
                 if (!in_array($attrs['role'], PEAR_Installer_Role::getBaseinstallRoles())) {
                     $attrs['baseinstalldir'] = is_array($package) ? $package[1] : $package;
                 }
                 if (isset($attrs['baseinstalldir'])) {
                     $name = $attrs['baseinstalldir'] . DIRECTORY_SEPARATOR . $name;
                 }
             }
             $pkgs[$name] = $this->checkFileMap($name, $package, $api, $attrs);
             if (PEAR::isError($pkgs[$name])) {
                 return $pkgs[$name];
             }
         }
         return array_filter($pkgs, $notempty);
     }
     if (empty($this->filemap_cache)) {
         if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
             return $e;
         }
         $err = $this->_readFileMap();
         $this->_unlock();
         if (PEAR::isError($err)) {
             return $err;
         }
     }
     if (!$attrs) {
         $attrs = array('role' => 'php');
         // any old call would be for PHP role only
     }
     if (isset($this->filemap_cache[$attrs['role']][$path])) {
         if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
             return false;
         }
         return $this->filemap_cache[$attrs['role']][$path];
     }
     $l = strlen($this->install_dir);
     if (substr($path, 0, $l) == $this->install_dir) {
         $path = preg_replace('!^' . DIRECTORY_SEPARATOR . '+!', '', substr($path, $l));
     }
     if (isset($this->filemap_cache[$attrs['role']][$path])) {
         if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
             return false;
         }
         return $this->filemap_cache[$attrs['role']][$path];
     }
     return false;
 }
Пример #2
0
 /**
  * Scan through the Command directory looking for classes
  * and see what commands they implement.
  * @param string which directory to look for classes, defaults to
  *               the Installer/Roles subdirectory of
  *               the directory from where this file (__FILE__) is
  *               included.
  *
  * @return bool TRUE on success, a PEAR error on failure
  * @access public
  * @static
  */
 function registerRoles($dir = null)
 {
     $GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
     $parser = new PEAR_XMLParser();
     if ($dir === null) {
         $dir = dirname(__FILE__) . '/Role';
     }
     if (!file_exists($dir) || !is_dir($dir)) {
         return PEAR::raiseError("registerRoles: opendir({$dir}) failed");
     }
     $dp = @opendir($dir);
     if (empty($dp)) {
         return PEAR::raiseError("registerRoles: opendir({$dir}) failed");
     }
     while ($entry = readdir($dp)) {
         if ($entry[0] == '.' || substr($entry, -4) != '.xml') {
             continue;
         }
         $class = "PEAR_Installer_Role_" . substr($entry, 0, -4);
         // List of roles
         if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
             $file = "{$dir}/{$entry}";
             $parser->parse(file_get_contents($file));
             $data = $parser->getData();
             if (!is_array($data['releasetypes'])) {
                 $data['releasetypes'] = array($data['releasetypes']);
             }
             $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
         }
     }
     closedir($dp);
     ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
     PEAR_Installer_Role::getBaseinstallRoles(true);
     PEAR_Installer_Role::getInstallableRoles(true);
     PEAR_Installer_Role::getPhpRoles(true);
     PEAR_Installer_Role::getValidRoles('****', true);
     return true;
 }
Пример #3
0
 /**
  * Scan through the Command directory looking for classes
  * and see what commands they implement.
  * @param string which directory to look for classes, defaults to
  *               the Installer/Roles subdirectory of
  *               the directory from where this file (__FILE__) is
  *               included.
  *
  * @return bool TRUE on success, a PEAR error on failure
  * @access public
  * @static
  */
 function registerRoles($dir = null)
 {
     if ($dir === null) {
         $dir = dirname(__FILE__) . '/Role';
     }
     $dp = @opendir($dir);
     if (empty($dp)) {
         return PEAR::raiseError("registerRoles: opendir({$dir}) failed");
     }
     while ($entry = readdir($dp)) {
         if ($entry[0] == '.' || substr($entry, -4) != '.php' || $entry == 'Common.php') {
             continue;
         }
         $class = "PEAR_Installer_Role_" . substr($entry, 0, -4);
         $file = "{$dir}/{$entry}";
         include_once $file;
         // List of roles
         if (empty($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
             $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = call_user_func(array($class, 'getInfo'));
         }
     }
     @closedir($dp);
     ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
     PEAR_Installer_Role::getBaseinstallRoles(true);
     PEAR_Installer_Role::getInstallableRoles(true);
     PEAR_Installer_Role::getPhpRoles(true);
     PEAR_Installer_Role::getValidRoles('****', true);
     return true;
 }