From 3903c0ac91cdaf3ae05f607d760851e20ed2a27f Mon Sep 17 00:00:00 2001 From: Scott Date: Thu, 12 Jun 2025 17:48:14 +1000 Subject: [PATCH 1/8] add custom shell with logging loop listener to log each execution --- .gitignore | 1 + src/Console/TinkerCommand.php | 4 ++-- src/Shell/CustomShell.php | 17 +++++++++++++++++ src/Shell/ShellLogListener.php | 31 +++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/Shell/CustomShell.php create mode 100644 src/Shell/ShellLogListener.php diff --git a/.gitignore b/.gitignore index 660fc15..5a14041 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ composer.lock /phpunit.xml .phpunit.result.cache +/.idea diff --git a/src/Console/TinkerCommand.php b/src/Console/TinkerCommand.php index 07ad30d..149f418 100644 --- a/src/Console/TinkerCommand.php +++ b/src/Console/TinkerCommand.php @@ -5,8 +5,8 @@ use Illuminate\Console\Command; use Illuminate\Support\Env; use Laravel\Tinker\ClassAliasAutoloader; +use Laravel\Tinker\Shell\CustomShell; use Psy\Configuration; -use Psy\Shell; use Psy\VersionUpdater\Checker; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; @@ -56,7 +56,7 @@ public function handle() $config->setRawOutput(true); } - $shell = new Shell($config); + $shell = new CustomShell($config); $shell->addCommands($this->getCommands()); $shell->setIncludes($this->argument('include')); diff --git a/src/Shell/CustomShell.php b/src/Shell/CustomShell.php new file mode 100644 index 0000000..fd59a2c --- /dev/null +++ b/src/Shell/CustomShell.php @@ -0,0 +1,17 @@ + $code]); + } + + /** + * Determines if this log listener is supported. + * + * @return bool + */ + public static function isSupported(): bool + { + return true; //implement a proper check + } +} From 6c3877d1b99f7ddecf8614c6e45b0c49982063cb Mon Sep 17 00:00:00 2001 From: Scott Date: Thu, 12 Jun 2025 17:54:45 +1000 Subject: [PATCH 2/8] remove pull request workflow --- .github/workflows/pull-requests.yml | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 .github/workflows/pull-requests.yml diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml deleted file mode 100644 index 18b32b3..0000000 --- a/.github/workflows/pull-requests.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: pull requests - -on: - pull_request_target: - types: [opened] - -permissions: - pull-requests: write - -jobs: - uneditable: - uses: laravel/.github/.github/workflows/pull-requests.yml@main From 56cfd0b14e53f1bb467bd735212029c14d72fe58 Mon Sep 17 00:00:00 2001 From: Scott Date: Fri, 13 Jun 2025 10:14:49 +1000 Subject: [PATCH 3/8] update name --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 4d7b5b9..c62265f 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "laravel/tinker", + "name": "covergenius/tinker", "description": "Powerful REPL for the Laravel framework.", "keywords": ["tinker", "repl", "psysh", "laravel"], "license": "MIT", From ef8b638d2b7778b72ea74c56216c3a6daa817fe4 Mon Sep 17 00:00:00 2001 From: Scott Date: Fri, 13 Jun 2025 13:24:05 +1000 Subject: [PATCH 4/8] update namespaces --- composer.json | 6 +++--- src/ClassAliasAutoloader.php | 2 +- src/Console/TinkerCommand.php | 6 +++--- src/Shell/CustomShell.php | 2 +- src/Shell/ShellLogListener.php | 2 +- src/TinkerCaster.php | 2 +- src/TinkerServiceProvider.php | 4 ++-- tests/ClassAliasAutoloaderTest.php | 4 ++-- tests/TinkerCasterTest.php | 4 ++-- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/composer.json b/composer.json index c62265f..bfe206f 100644 --- a/composer.json +++ b/composer.json @@ -27,12 +27,12 @@ }, "autoload": { "psr-4": { - "Laravel\\Tinker\\": "src/" + "CoverGenius\\Tinker\\": "src/" } }, "autoload-dev": { "psr-4": { - "Laravel\\Tinker\\Tests\\": "tests/", + "CoverGenius\\Tinker\\Tests\\": "tests/", "App\\": "tests/fixtures/app", "One\\Two\\": "tests/fixtures/vendor/one/two" } @@ -40,7 +40,7 @@ "extra": { "laravel": { "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" + "CoverGenius\\Tinker\\TinkerServiceProvider" ] } }, diff --git a/src/ClassAliasAutoloader.php b/src/ClassAliasAutoloader.php index 994d75c..20a0556 100644 --- a/src/ClassAliasAutoloader.php +++ b/src/ClassAliasAutoloader.php @@ -1,6 +1,6 @@ Date: Wed, 18 Jun 2025 16:29:12 +1000 Subject: [PATCH 5/8] adding logging via php-logger --- composer.json | 11 +++++++++-- src/Shell/ShellLogListener.php | 31 ++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index bfe206f..f5905f9 100644 --- a/composer.json +++ b/composer.json @@ -9,13 +9,20 @@ "email": "taylor@laravel.com" } ], + "repositories": [ + { + "type": "vcs", + "url": "https://gitlab.covergenius.biz/cg/php/php-logger.git" + } + ], "require": { - "php": "^7.2.5|^8.0", + "php": "^8.0", "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0", + "covergenius/php-logger": "dev-chore/add-logging-for-code-execution" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", diff --git a/src/Shell/ShellLogListener.php b/src/Shell/ShellLogListener.php index 14e5242..a2482a4 100644 --- a/src/Shell/ShellLogListener.php +++ b/src/Shell/ShellLogListener.php @@ -2,21 +2,31 @@ namespace CoverGenius\Tinker\Shell; +use Covergenius\Php\Logger\Resources\CodeExecutionLogger; use Psy\ExecutionLoop\AbstractListener; use Psy\Shell; class ShellLogListener extends AbstractListener { + /** + * @var CodeExecutionLogger|null + */ + protected ?CodeExecutionLogger $logger; + /** * Listen for code execution. * - * @param \Psy\Shell $shell + * @param Shell $shell * @param string $code * @return void */ - public function onExecute(Shell $shell, $code) + public function onExecute(Shell $shell, string $code): void { - \Log::debug('Tinker session code run', ['code' => $code]); + if ($this->logger instanceof CodeExecutionLogger) { + $this->logger->addToLog($code); + } else { + $this->logger = CodeExecutionLogger::startLog($code); + } } /** @@ -28,4 +38,19 @@ public static function isSupported(): bool { return true; //implement a proper check } + + /** + * Commits the log if the logger has been initialized. + * + * This ensures that the log is always saved, even if the shell is exited + * or the process is terminated. + * + * @return void + */ + public function __destruct() + { + if ($this->logger instanceof CodeExecutionLogger) { + $this->logger->commitLog();; + } + } } From 5dd546483dfc7264311993a3233f43b9192fe281 Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 18 Jun 2025 16:54:00 +1000 Subject: [PATCH 6/8] update logging to be simpler --- src/Shell/ShellLogListener.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Shell/ShellLogListener.php b/src/Shell/ShellLogListener.php index a2482a4..e68dfe9 100644 --- a/src/Shell/ShellLogListener.php +++ b/src/Shell/ShellLogListener.php @@ -13,6 +13,11 @@ class ShellLogListener extends AbstractListener */ protected ?CodeExecutionLogger $logger; + public function __construct() + { + $this->logger = new CodeExecutionLogger(); + } + /** * Listen for code execution. * @@ -22,11 +27,7 @@ class ShellLogListener extends AbstractListener */ public function onExecute(Shell $shell, string $code): void { - if ($this->logger instanceof CodeExecutionLogger) { - $this->logger->addToLog($code); - } else { - $this->logger = CodeExecutionLogger::startLog($code); - } + $this->logger->addToLog($code); } /** @@ -40,7 +41,7 @@ public static function isSupported(): bool } /** - * Commits the log if the logger has been initialized. + * Commits the log * * This ensures that the log is always saved, even if the shell is exited * or the process is terminated. @@ -49,8 +50,6 @@ public static function isSupported(): bool */ public function __destruct() { - if ($this->logger instanceof CodeExecutionLogger) { - $this->logger->commitLog();; - } + $this->logger->commitLog(); } } From ac6674c550df609c0fe198865cd9a7f606d69485 Mon Sep 17 00:00:00 2001 From: Scott Date: Fri, 4 Jul 2025 16:19:03 +1000 Subject: [PATCH 7/8] change to use arbitrary code logger --- src/Shell/ShellLogListener.php | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/src/Shell/ShellLogListener.php b/src/Shell/ShellLogListener.php index e68dfe9..bd4befa 100644 --- a/src/Shell/ShellLogListener.php +++ b/src/Shell/ShellLogListener.php @@ -2,22 +2,12 @@ namespace CoverGenius\Tinker\Shell; -use Covergenius\Php\Logger\Resources\CodeExecutionLogger; +use Covergenius\Php\Logger\Resources\ArbitraryDataLogger; use Psy\ExecutionLoop\AbstractListener; use Psy\Shell; class ShellLogListener extends AbstractListener { - /** - * @var CodeExecutionLogger|null - */ - protected ?CodeExecutionLogger $logger; - - public function __construct() - { - $this->logger = new CodeExecutionLogger(); - } - /** * Listen for code execution. * @@ -27,7 +17,10 @@ public function __construct() */ public function onExecute(Shell $shell, string $code): void { - $this->logger->addToLog($code); + ArbitraryDataLogger::log([ + 'source' => 'tinker', + 'code' => $code + ]); } /** @@ -39,17 +32,4 @@ public static function isSupported(): bool { return true; //implement a proper check } - - /** - * Commits the log - * - * This ensures that the log is always saved, even if the shell is exited - * or the process is terminated. - * - * @return void - */ - public function __destruct() - { - $this->logger->commitLog(); - } } From 3ab2acd36795afe365fbfb4747525b5554da58fc Mon Sep 17 00:00:00 2001 From: Scott Flack Date: Mon, 11 Aug 2025 14:17:09 +1000 Subject: [PATCH 8/8] alter composer to not force installing php logger, add proper check for if listener should be used --- composer.json | 9 ++++++--- src/Shell/CustomShell.php | 2 +- src/Shell/ShellLogListener.php | 11 ++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/composer.json b/composer.json index f5905f9..6a117fe 100644 --- a/composer.json +++ b/composer.json @@ -21,16 +21,19 @@ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0", - "covergenius/php-logger": "dev-chore/add-logging-for-code-execution" + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, + "replace": { + "laravel/tinker": "^v2.10.0" + }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0).", + "covergenius/php-logger": "^5.1.0" }, "autoload": { "psr-4": { diff --git a/src/Shell/CustomShell.php b/src/Shell/CustomShell.php index 397720b..0ecb12f 100644 --- a/src/Shell/CustomShell.php +++ b/src/Shell/CustomShell.php @@ -8,7 +8,7 @@ class CustomShell extends Shell { protected function getDefaultLoopListeners(): array { - $listeners = parent::getDefaultLoopListeners(); // TODO: Change the autogenerated stub + $listeners = parent::getDefaultLoopListeners(); $listeners[] = new ShellLogListener(); diff --git a/src/Shell/ShellLogListener.php b/src/Shell/ShellLogListener.php index bd4befa..8f56ac5 100644 --- a/src/Shell/ShellLogListener.php +++ b/src/Shell/ShellLogListener.php @@ -2,7 +2,6 @@ namespace CoverGenius\Tinker\Shell; -use Covergenius\Php\Logger\Resources\ArbitraryDataLogger; use Psy\ExecutionLoop\AbstractListener; use Psy\Shell; @@ -11,13 +10,13 @@ class ShellLogListener extends AbstractListener /** * Listen for code execution. * - * @param Shell $shell - * @param string $code + * @param Shell $shell the shell instance + * @param string $code the code from psy that we want to log * @return void */ public function onExecute(Shell $shell, string $code): void { - ArbitraryDataLogger::log([ + \Covergenius\Php\Logger\Resources\ArbitraryDataLogger::log([ 'source' => 'tinker', 'code' => $code ]); @@ -26,10 +25,12 @@ public function onExecute(Shell $shell, string $code): void /** * Determines if this log listener is supported. * + * currently we check if php-logger class for arbitrary data logging exists + * * @return bool */ public static function isSupported(): bool { - return true; //implement a proper check + return class_exists('\Covergenius\Php\Logger\Resources\ArbitraryDataLogger'); } }