From 07b98030dfb5710bbe26c04dadf6d55af4cab835 Mon Sep 17 00:00:00 2001 From: Sami Mazouz Date: Thu, 17 Oct 2024 15:19:31 +0100 Subject: [PATCH] chore(em): port fix from 1.x --- .../src/Command/GlobalUpdateHandler.php | 3 +- .../src/Command/MajorUpdateHandler.php | 2 +- .../src/Command/MinorUpdateHandler.php | 3 +- .../src/Command/RemoveExtensionHandler.php | 3 +- .../src/Command/RequireExtensionHandler.php | 3 +- .../src/Command/UpdateExtensionHandler.php | 3 +- .../src/Composer/ComposerAdapter.php | 28 +++++++++++++++++-- .../src/ExtensionManagerServiceProvider.php | 2 ++ 8 files changed, 39 insertions(+), 8 deletions(-) diff --git a/extensions/package-manager/src/Command/GlobalUpdateHandler.php b/extensions/package-manager/src/Command/GlobalUpdateHandler.php index 888173f5b..9f807e9ae 100644 --- a/extensions/package-manager/src/Command/GlobalUpdateHandler.php +++ b/extensions/package-manager/src/Command/GlobalUpdateHandler.php @@ -44,7 +44,8 @@ class GlobalUpdateHandler $output = $this->composer->run( new ArrayInput($input), - $command->task ?? null + $command->task ?? null, + true ); if ($output->getExitCode() !== 0) { diff --git a/extensions/package-manager/src/Command/MajorUpdateHandler.php b/extensions/package-manager/src/Command/MajorUpdateHandler.php index 097cad7d0..f34018ccf 100644 --- a/extensions/package-manager/src/Command/MajorUpdateHandler.php +++ b/extensions/package-manager/src/Command/MajorUpdateHandler.php @@ -89,7 +89,7 @@ class MajorUpdateHandler $input['--dry-run'] = true; } - $output = $this->composer->run(new ArrayInput($input), $command->task ?? null); + $output = $this->composer->run(new ArrayInput($input), $command->task ?? null, true); if ($output->getExitCode() !== 0) { throw new MajorUpdateFailedException('*', $output->getContents(), $majorVersion); diff --git a/extensions/package-manager/src/Command/MinorUpdateHandler.php b/extensions/package-manager/src/Command/MinorUpdateHandler.php index 43d47c4ab..7746118d1 100755 --- a/extensions/package-manager/src/Command/MinorUpdateHandler.php +++ b/extensions/package-manager/src/Command/MinorUpdateHandler.php @@ -40,7 +40,8 @@ class MinorUpdateHandler $output = $this->composer->run( new StringInput('update --prefer-dist --no-dev -a --with-all-dependencies'), - $command->task ?? null + $command->task ?? null, + true ); if ($output->getExitCode() !== 0) { diff --git a/extensions/package-manager/src/Command/RemoveExtensionHandler.php b/extensions/package-manager/src/Command/RemoveExtensionHandler.php index 7ccd3adc8..c7e623cb4 100755 --- a/extensions/package-manager/src/Command/RemoveExtensionHandler.php +++ b/extensions/package-manager/src/Command/RemoveExtensionHandler.php @@ -56,7 +56,8 @@ class RemoveExtensionHandler $output = $this->composer->run( new StringInput("remove $extension->name"), - $command->task ?? null + $command->task ?? null, + true ); if ($output->getExitCode() !== 0) { diff --git a/extensions/package-manager/src/Command/RequireExtensionHandler.php b/extensions/package-manager/src/Command/RequireExtensionHandler.php index 180b3abdf..4baf981c0 100755 --- a/extensions/package-manager/src/Command/RequireExtensionHandler.php +++ b/extensions/package-manager/src/Command/RequireExtensionHandler.php @@ -55,7 +55,8 @@ class RequireExtensionHandler $output = $this->composer->run( new StringInput("require $packageName -W"), - $command->task ?? null + $command->task ?? null, + true ); if ($output->getExitCode() !== 0) { diff --git a/extensions/package-manager/src/Command/UpdateExtensionHandler.php b/extensions/package-manager/src/Command/UpdateExtensionHandler.php index 1276712df..befa27e6d 100755 --- a/extensions/package-manager/src/Command/UpdateExtensionHandler.php +++ b/extensions/package-manager/src/Command/UpdateExtensionHandler.php @@ -62,7 +62,8 @@ class UpdateExtensionHandler $output = $this->composer->run( new StringInput($input), - $command->task ?? null + $command->task ?? null, + true ); if ($output->getExitCode() !== 0) { diff --git a/extensions/package-manager/src/Composer/ComposerAdapter.php b/extensions/package-manager/src/Composer/ComposerAdapter.php index 16deb8bb7..d8103e0a6 100644 --- a/extensions/package-manager/src/Composer/ComposerAdapter.php +++ b/extensions/package-manager/src/Composer/ComposerAdapter.php @@ -15,6 +15,7 @@ use Flarum\ExtensionManager\OutputLogger; use Flarum\ExtensionManager\Support\Util; use Flarum\ExtensionManager\Task\Task; use Flarum\Foundation\Paths; +use Illuminate\Filesystem\Filesystem; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\BufferedOutput; @@ -28,11 +29,12 @@ class ComposerAdapter public function __construct( private readonly Application $application, private readonly OutputLogger $logger, - private readonly Paths $paths + private readonly Paths $paths, + private readonly Filesystem $filesystem ) { } - public function run(InputInterface $input, ?Task $task = null): ComposerOutput + public function run(InputInterface $input, ?Task $task = null, bool $safeMode = false): ComposerOutput { $this->application->resetComposer(); @@ -41,7 +43,29 @@ class ComposerAdapter // This hack is necessary so that relative path repositories are resolved properly. $currDir = getcwd(); chdir($this->paths->base); + + if ($safeMode) { + $temporaryVendorDir = $this->paths->base . DIRECTORY_SEPARATOR . 'temp-vendor'; + if (! $this->filesystem->isDirectory($temporaryVendorDir)) { + $this->filesystem->makeDirectory($temporaryVendorDir); + } + Config::$defaultConfig['vendor-dir'] = $temporaryVendorDir; + } + $exitCode = $this->application->run($input, $this->output); + + if ($safeMode) { + // Move the temporary vendor directory to the real vendor directory. + if ($this->filesystem->isDirectory($temporaryVendorDir) && count($this->filesystem->allFiles($temporaryVendorDir))) { + $vendorDir = $this->paths->vendor; + if (file_exists($vendorDir)) { + $this->filesystem->deleteDirectory($vendorDir); + } + $this->filesystem->moveDirectory($temporaryVendorDir, $vendorDir); + } + Config::$defaultConfig['vendor-dir'] = $this->paths->vendor; + } + chdir($currDir); $command = Util::readableConsoleInput($input); diff --git a/extensions/package-manager/src/ExtensionManagerServiceProvider.php b/extensions/package-manager/src/ExtensionManagerServiceProvider.php index a7b3769c2..d40b0e182 100755 --- a/extensions/package-manager/src/ExtensionManagerServiceProvider.php +++ b/extensions/package-manager/src/ExtensionManagerServiceProvider.php @@ -24,6 +24,7 @@ use Flarum\Frontend\RecompileFrontendAssets; use Flarum\Locale\LocaleManager; use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Filesystem\Filesystem; use Monolog\Formatter\LineFormatter; use Monolog\Handler\RotatingFileHandler; use Monolog\Logger; @@ -56,6 +57,7 @@ class ExtensionManagerServiceProvider extends AbstractServiceProvider $composer, $container->make(OutputLogger::class), $container->make(Paths::class), + $container->make(Filesystem::class) ); });