Skip to content
Snippets Groups Projects
Commit a4907198 authored by Marcus Eibrink-Lunzenauer's avatar Marcus Eibrink-Lunzenauer
Browse files

Add REPL cli script.

Closes #3897

Merge request studip/studip!2756
parent 8e82625c
No related branches found
No related tags found
No related merge requests found
<?php
namespace Studip\Cli\Commands\Base;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Process\Process;
use Psy\Configuration;
use Psy\Shell;
use Psy\VersionUpdater\Checker;
class Tinker extends Command
{
protected static $defaultName = 'tinker';
protected function configure(): void
{
$this->setDescription('Interact with your Stud.IP in a read-eval-print loop (REPL).');
}
/**
* @SuppressWarnings(PHPMD.StaticAccess)
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$config = Configuration::fromInput($input);
$config->setUpdateCheck(Checker::NEVER);
$config->setDefaultIncludes([__DIR__ . '/../../studip_cli_env.inc.php']);
$shell = new Shell($config);
return $shell->run();
}
}
......@@ -13,6 +13,7 @@ require __DIR__.'/../composer/autoload.php';
$application = new Application();
$commands = [
Commands\Base\Dump::class,
Commands\Base\Tinker::class,
Commands\Checks\Compatibility::class,
Commands\Checks\GlobalizedConfig::class,
Commands\Checks\HelpTours::class,
......@@ -38,29 +39,29 @@ $commands = [
Commands\Fix\Biest8136::class,
Commands\Fix\IconDimensions::class,
Commands\HelpContent\Migrate::class,
Commands\Migrate\Migrate::class,
Commands\Migrate\MigrateList::class,
Commands\Migrate\MigrateStatus::class,
Commands\Migrate\Migrate::class,
Commands\OAuth2\Keys::class,
Commands\OAuth2\Purge::class,
Commands\Plugins\I18N\I18NCompile::class,
Commands\Plugins\I18N\I18NDetect::class,
Commands\Plugins\I18N\I18NExtract::class,
Commands\Plugins\PluginActivate::class,
Commands\Plugins\PluginDeactivate::class,
Commands\Plugins\PluginInfo::class,
Commands\Plugins\PluginInstall::class,
Commands\Plugins\PluginListMigrations::class,
Commands\Plugins\PluginStatusMigrations::class,
Commands\Plugins\PluginMigrate::class,
Commands\Plugins\PluginRegister::class,
Commands\Plugins\PluginScan::class,
Commands\Plugins\PluginStatusMigrations::class,
Commands\Plugins\PluginUnregister::class,
Commands\Plugins\I18N\I18NDetect::class,
Commands\Plugins\I18N\I18NExtract::class,
Commands\Plugins\I18N\I18NCompile::class,
Commands\Resources\UpdateBookingIntervals::class,
Commands\SORM\DescribeModels::class,
Commands\Twillo\PrivateKeys::class,
Commands\User\UsersDelete::class,
Commands\User\GetUser::class,
Commands\User\UsersDelete::class,
];
$creator = function ($command) {
return app($command);
......
......@@ -60,7 +60,8 @@
"ksubileau/color-thief-php": "^2.0",
"symfony/polyfill-php82": "^1.28",
"symfony/polyfill-php83": "^1.28",
"phpoffice/phpspreadsheet": "^1.19"
"phpoffice/phpspreadsheet": "^1.19",
"psy/psysh": "^0.12.2"
},
"replace": {
"symfony/polyfill-php54": "*",
......
......@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "76e4dce9372399bca6af1762cd407649",
"content-hash": "57c5409fb404051d418751e660f3210f",
"packages": [
{
"name": "algo26-matthias/idna-convert",
......@@ -1689,6 +1689,64 @@
},
"time": "2018-02-13T20:26:39+00:00"
},
{
"name": "nikic/php-parser",
"version": "v5.0.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
"reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"php": ">=7.4"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.0-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
},
"time": "2024-03-05T20:51:40+00:00"
},
{
"name": "opis/closure",
"version": "3.6.3",
......@@ -3006,6 +3064,85 @@
},
"time": "2017-10-23T01:57:42+00:00"
},
{
"name": "psy/psysh",
"version": "v0.12.2",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
"reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/9185c66c2165bbf4d71de78a69dccf4974f9538d",
"reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-tokenizer": "*",
"nikic/php-parser": "^5.0 || ^4.0",
"php": "^8.0 || ^7.4",
"symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
"symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
},
"conflict": {
"symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.2"
},
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
"ext-pdo-sqlite": "The doc command requires SQLite to work.",
"ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
},
"bin": [
"bin/psysh"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "0.12.x-dev"
},
"bamarni-bin": {
"bin-links": false,
"forward-command": false
}
},
"autoload": {
"files": [
"src/functions.php"
],
"psr-4": {
"Psy\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Justin Hileman",
"email": "justin@justinhileman.info",
"homepage": "http://justinhileman.com"
}
],
"description": "An interactive shell for modern PHP.",
"homepage": "http://psysh.org",
"keywords": [
"REPL",
"console",
"interactive",
"shell"
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
"source": "https://github.com/bobthecow/psysh/tree/v0.12.2"
},
"time": "2024-03-17T01:53:00+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
......@@ -4365,6 +4502,95 @@
],
"time": "2023-02-22T08:00:55+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
"reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"phpunit/phpunit": "<5.4.3",
"symfony/console": "<4.4"
},
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-intl": "To show region name in time zone dump",
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
},
"bin": [
"Resources/bin/var-dump-server"
],
"type": "library",
"autoload": {
"files": [
"Resources/functions/dump.php"
],
"psr-4": {
"Symfony\\Component\\VarDumper\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.21"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-02-23T10:00:28+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.21",
......@@ -7325,95 +7551,6 @@
],
"time": "2023-02-16T09:33:00+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
"reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"phpunit/phpunit": "<5.4.3",
"symfony/console": "<4.4"
},
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-intl": "To show region name in time zone dump",
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
},
"bin": [
"Resources/bin/var-dump-server"
],
"type": "library",
"autoload": {
"files": [
"Resources/functions/dump.php"
],
"psr-4": {
"Symfony\\Component\\VarDumper\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.21"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-02-23T10:00:28+00:00"
},
{
"name": "theseer/tokenizer",
"version": "1.2.1",
......@@ -7553,5 +7690,5 @@
"platform-overrides": {
"php": "7.4"
},
"plugin-api-version": "2.6.0"
"plugin-api-version": "2.2.0"
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment