diff --git a/src/Symfony/Component/AssetMapper/CHANGELOG.md b/src/Symfony/Component/AssetMapper/CHANGELOG.md index e0b43ebb5e691..11abeaf9ad66e 100644 --- a/src/Symfony/Component/AssetMapper/CHANGELOG.md +++ b/src/Symfony/Component/AssetMapper/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 7.2 --- + * Add logical failure implementation. * Shorten the public digest of mapped assets to 7 characters 7.1 diff --git a/src/Symfony/Component/AssetMapper/Command/ImportMapInstallCommand.php b/src/Symfony/Component/AssetMapper/Command/ImportMapInstallCommand.php index 8f67656e5264e..0c1829d91cad6 100644 --- a/src/Symfony/Component/AssetMapper/Command/ImportMapInstallCommand.php +++ b/src/Symfony/Component/AssetMapper/Command/ImportMapInstallCommand.php @@ -11,6 +11,7 @@ namespace Symfony\Component\AssetMapper\Command; +use Symfony\Component\AssetMapper\Exception\LogicException; use Symfony\Component\AssetMapper\ImportMap\RemotePackageDownloader; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; @@ -42,18 +43,26 @@ protected function execute(InputInterface $input, OutputInterface $output): int $finishedCount = 0; $progressBar = new ProgressBar($output); $progressBar->setFormat('%current%/%max% %bar% %url%'); - $downloadedPackages = $this->packageDownloader->downloadPackages(function (string $package, string $event, ResponseInterface $response, int $totalPackages) use (&$finishedCount, $progressBar) { - $progressBar->setMessage($response->getInfo('url'), 'url'); - if (0 === $progressBar->getMaxSteps()) { - $progressBar->setMaxSteps($totalPackages); - $progressBar->start(); - } - if ('finished' === $event) { - ++$finishedCount; - $progressBar->advance(); - } - }); + try { + $downloadedPackages = $this->packageDownloader->downloadPackages(function (string $package, string $event, ResponseInterface $response, int $totalPackages) use (&$finishedCount, $progressBar) { + $progressBar->setMessage($response->getInfo('url'), 'url'); + if (0 === $progressBar->getMaxSteps()) { + $progressBar->setMaxSteps($totalPackages); + $progressBar->start(); + } + + if ('finished' === $event) { + ++$finishedCount; + $progressBar->advance(); + } + }); + } catch (LogicException $throwable) { + $io->error($throwable->getMessage()); + + return Command::FAILURE; + } + $progressBar->finish(); $progressBar->clear(); diff --git a/src/Symfony/Component/AssetMapper/ImportMap/RemotePackageDownloader.php b/src/Symfony/Component/AssetMapper/ImportMap/RemotePackageDownloader.php index 47b6a14598728..44dabdc1d2861 100644 --- a/src/Symfony/Component/AssetMapper/ImportMap/RemotePackageDownloader.php +++ b/src/Symfony/Component/AssetMapper/ImportMap/RemotePackageDownloader.php @@ -11,8 +11,11 @@ namespace Symfony\Component\AssetMapper\ImportMap; +use Symfony\Component\AssetMapper\Exception\LogicException; use Symfony\Component\AssetMapper\ImportMap\Resolver\PackageResolverInterface; use Symfony\Component\Filesystem\Filesystem; +use Symfony\Component\HttpClient\Exception\TimeoutException; +use Symfony\Component\HttpClient\Exception\TransportException; /** * @final @@ -69,11 +72,15 @@ public function downloadPackages(?callable $progressCallback = null): array return []; } - $contents = $this->packageResolver->downloadPackages($remoteEntriesToDownload, $progressCallback); + try { + $contents = $this->packageResolver->downloadPackages($remoteEntriesToDownload, $progressCallback); + } catch (TimeoutException|TransportException $exception) { + throw new LogicException($exception->getMessage()); + } $downloadedPackages = []; foreach ($remoteEntriesToDownload as $package => $entry) { if (!isset($contents[$package])) { - throw new \LogicException(\sprintf('The package "%s" was not downloaded.', $package)); + throw new LogicException(\sprintf('The package "%s" was not downloaded.', $package)); } $this->remotePackageStorage->save($entry, $contents[$package]['content']); @@ -92,7 +99,7 @@ public function downloadPackages(?callable $progressCallback = null): array } if ($contents) { - throw new \LogicException(\sprintf('The following packages were unexpectedly downloaded: "%s".', implode('", "', array_keys($contents)))); + throw new LogicException(\sprintf('The following packages were unexpectedly downloaded: "%s".', implode('", "', array_keys($contents)))); } $this->saveInstalled($newInstalled); @@ -136,7 +143,7 @@ private function loadInstalled(): array } if (!isset($data['dependencies'])) { - throw new \LogicException(\sprintf('The package "%s" is missing its dependencies.', $package)); + throw new LogicException(\sprintf('The package "%s" is missing its dependencies.', $package)); } if (!isset($data['extraFiles'])) {