Spaces:
No application file
No application file
File size: 2,967 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
<?php
namespace Mautic\MarketplaceBundle\Command;
use Mautic\CoreBundle\Helper\ComposerHelper;
use Mautic\MarketplaceBundle\Exception\ApiException;
use Mautic\MarketplaceBundle\Model\PackageModel;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class InstallCommand extends Command
{
public const NAME = 'mautic:marketplace:install';
public function __construct(
private ComposerHelper $composer,
private PackageModel $packageModel
) {
parent::__construct();
}
protected function configure(): void
{
$this->setName(self::NAME);
$this->addArgument('package', InputArgument::REQUIRED, 'The Packagist package to install (e.g. mautic/example-plugin)');
$this->addOption('dry-run', null, null, 'Simulate the installation of the package. Doesn\'t actually install it.');
parent::configure();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$packageName = $input->getArgument('package');
$dryRun = true === $input->getOption('dry-run') ? true : false;
try {
$package = $this->packageModel->getPackageDetail($packageName);
} catch (ApiException $e) {
if (404 === $e->getCode()) {
throw new \InvalidArgumentException('Given package '.$packageName.' does not exist in Packagist. Please check the name for typos.');
} else {
throw new \Exception('Error while trying to get package details: '.$e->getMessage());
}
}
if (empty($package->packageBase->type) || 'mautic-plugin' !== $package->packageBase->type) {
throw new \Exception('Package type is not mautic-plugin. Cannot install this plugin.');
}
if ($dryRun) {
$output->writeLn('Note: dry-running this installation!');
}
$output->writeln('Installing '.$input->getArgument('package').', this might take a while...');
$result = $this->composer->install($input->getArgument('package'), $dryRun);
if (0 !== $result->exitCode) {
$output->writeln('<error>Error while installing this plugin.</error>');
if ($result->output) {
$output->writeln($result->output);
} else {
// If the output is empty then tell the user where to find more details.
$output->writeln('Check the logs for more details or run again with the -vvv parameter.');
}
return $result->exitCode;
}
$output->writeln('All done! '.$input->getArgument('package').' has successfully been installed.');
return Command::SUCCESS;
}
protected static $defaultDescription = 'Installs a plugin that is available at Packagist.org';
}
|