Вход Регистрация
Файл: gapps/vendor/psy/psysh/src/Psy/functions.php
Строк: 306
<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2015 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Psy;

use 
SymfonyComponentConsoleInputArgvInput;
use 
SymfonyComponentConsoleInputInputArgument;
use 
SymfonyComponentConsoleInputInputDefinition;
use 
SymfonyComponentConsoleInputInputOption;

if (!
function_exists('Psysh')) {
    
/**
     * Command to return the eval-able code to startup PsySH.
     *
     *     eval(Psysh());
     *
     * @return string
     */
    
function sh()
    {
        return 
'extract(PsyShell::debug(get_defined_vars(), isset($this) ? $this : null));';
    }
}

if (!
function_exists('Psyinfo')) {
    function 
info()
    {
        
$config = new Configuration();

        
$core = array(
            
'PsySH version'       => Shell::VERSION,
            
'PHP version'         => PHP_VERSION,
            
'default includes'    => $config->getDefaultIncludes(),
            
'require semicolons'  => $config->requireSemicolons(),
            
'error logging level' => $config->errorLoggingLevel(),
            
'config file'         => array(
                
'default config file' => $config->getConfigFile(),
                
'local config file'   => $config->getLocalConfigFile(),
                
'PSYSH_CONFIG env'    => getenv('PSYSH_CONFIG'),
            ),
            
// 'config dir'  => $config->getConfigDir(),
            // 'data dir'    => $config->getDataDir(),
            // 'runtime dir' => $config->getRuntimeDir(),
        
);

        if (
$config->hasReadline()) {
            
$info readline_info();

            
$readline = array(
                
'readline available' => true,
                
'readline enabled'   => $config->useReadline(),
                
'readline service'   => get_class($config->getReadline()),
                
'readline library'   => $info['library_version'],
            );

            if (
$info['readline_name'] !== '') {
                
$readline['readline name'] = $info['readline_name'];
            }
        } else {
            
$readline = array(
                
'readline available' => false,
            );
        }

        
$pcntl = array(
            
'pcntl available' => function_exists('pcntl_signal'),
            
'posix available' => function_exists('posix_getpid'),
        );

        
$history = array(
            
'history file'     => $config->getHistoryFile(),
            
'history size'     => $config->getHistorySize(),
            
'erase duplicates' => $config->getEraseDuplicates(),
        );

        
$docs = array(
            
'manual db file'   => $config->getManualDbFile(),
            
'sqlite available' => true,
        );

        try {
            if (
$db $config->getManualDb()) {
                if (
$q $db->query('SELECT * FROM meta;')) {
                    
$q->setFetchMode(PDO::FETCH_KEY_PAIR);
                    
$meta $q->fetchAll();

                    foreach (
$meta as $key => $val) {
                        switch (
$key) {
                            case 
'built_at':
                                
$d = new DateTime('@' $val);
                                
$val $d->format(DateTime::RFC2822);
                                break;
                        }
                        
$key 'db ' str_replace('_'' '$key);
                        
$docs[$key] = $val;
                    }
                } else {
                    
$docs['db schema'] = '0.1.0';
                }
            }
        } catch (
ExceptionRuntimeException $e) {
            if (
$e->getMessage() === 'SQLite PDO driver not found') {
                
$docs['sqlite available'] = false;
            } else {
                throw 
$e;
            }
        }

        
$autocomplete = array(
            
'tab completion enabled' => $config->getTabCompletion(),
            
'custom matchers'        => array_map('get_class'$config->getTabCompletionMatchers()),
        );

        return 
array_merge($corecompact('pcntl''readline''history''docs''autocomplete'));
    }
}

if (!
function_exists('Psybin')) {
    
/**
     * `psysh` command line executable.
     *
     * @return Closure
     */
    
function bin()
    {
        return function () {
            
$usageException null;

            
$input = new ArgvInput();
            try {
                
$input->bind(new InputDefinition(array(
                    new 
InputOption('help',     'h',  InputOption::VALUE_NONE),
                    new 
InputOption('config',   'c',  InputOption::VALUE_REQUIRED),
                    new 
InputOption('version',  'v',  InputOption::VALUE_NONE),
                    new 
InputOption('cwd',      nullInputOption::VALUE_REQUIRED),
                    new 
InputOption('color',    nullInputOption::VALUE_NONE),
                    new 
InputOption('no-color'nullInputOption::VALUE_NONE),

                    new 
InputArgument('include'InputArgument::IS_ARRAY),
                )));
            } catch (
RuntimeException $e) {
                
$usageException $e;
            }

            
$config = array();

            
// Handle --config
            
if ($configFile $input->getOption('config')) {
                
$config['configFile'] = $configFile;
            }

            
// Handle --color and --no-color
            
if ($input->getOption('color') && $input->getOption('no-color')) {
                
$usageException = new RuntimeException('Using both "--color" and "--no-color" options is invalid.');
            } elseif (
$input->getOption('color')) {
                
$config['colorMode'] = Configuration::COLOR_MODE_FORCED;
            } elseif (
$input->getOption('no-color')) {
                
$config['colorMode'] = Configuration::COLOR_MODE_DISABLED;
            }

            
$shell = new Shell(new Configuration($config));

            
// Handle --help
            
if ($usageException !== null || $input->getOption('help')) {
                if (
$usageException !== null) {
                    echo 
$usageException->getMessage() . PHP_EOL PHP_EOL;
                }

                
$version $shell->getVersion();
                
$name    basename(reset($_SERVER['argv']));
                echo <<<EOL
$version

Usage:
  
$name [--version] [--help] [files...]

Options:
  --help     -h Display this help message.
  --config   -c Use an alternate PsySH config file location.
  --cwd         Use an alternate working directory.
  --version  -v Display the PsySH version.
  --color       Force colors in output.
  --no-color    Disable colors in output.

EOL;
                exit(
$usageException === null 1);
            }

            
// Handle --version
            
if ($input->getOption('version')) {
                echo 
$shell->getVersion() . PHP_EOL;
                exit(
0);
            }

            
// Pass additional arguments to Shell as 'includes'
            
$shell->setIncludes($input->getArgument('include'));

            try {
                
// And go!
                
$shell->run();
            } catch (
Exception $e) {
                echo 
$e->getMessage() . PHP_EOL;

                
// TODO: this triggers the "exited unexpectedly" logic in the
                // ForkingLoop, so we can't exit(1) after starting the shell...
                // fix this :)

                // exit(1);
            
}
        };
    }
}
Онлайн: 1
Реклама