diff --git a/bin/composer-script/CreateProjectScript.php b/bin/composer-script/CreateProjectScript.php index 070c0d9c8..ccdd5516b 100644 --- a/bin/composer-script/CreateProjectScript.php +++ b/bin/composer-script/CreateProjectScript.php @@ -1,5 +1,7 @@ create(); @@ -30,9 +35,42 @@ protected static function getProjectFolder(Event $event): string /** * Execute a command in the CLI, as a separate process. */ - protected static function run(string $command): void + protected static function run(string $command): int { - $process = new Process($command); - $process->run(); + // Depending on the context, we're using either Symfony/Process 2.8.52 (bundled with composer 2.1.x) + // or Symfony/Process 5.3.x (if we're using our own). The signature of the Constructor changed + // from: `public function __construct(string $commandline, …)` + // to: `public function __construct(array $command, …)` + // We'll have to attempt one, and otherwise fall back to the other. + + try { + $process = new Process($command); + } catch (\TypeError $e) { + $process = new Process([$command]); + } + + return $process->run(); + } + + /** + * Create SymfonyStyle object. Taken from Symplify (which we might not + * have at our disposal inside a 'project' installation) + */ + public static function createSymfonyStyle(): SymfonyStyle + { + // to prevent missing argv indexes + if (! isset($_SERVER['argv'])) { + $_SERVER['argv'] = []; + } + + $argvInput = new ArgvInput(); + $consoleOutput = new ConsoleOutput(); + + // --debug is called + if ($argvInput->hasParameterOption('--debug')) { + $consoleOutput->setVerbosity(OutputInterface::VERBOSITY_DEBUG); + } + + return new SymfonyStyle($argvInput, $consoleOutput); } }