Skip to content
This repository was archived by the owner on Nov 2, 2024. It is now read-only.

Commit f1e0671

Browse files
committed
Add support to specify Drupal core or distro
1 parent cd52cb6 commit f1e0671

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

src/DrupalInitCommand.php

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
namespace Hussainweb\DrupalComposerInit;
44

55
use Composer\Command\InitCommand;
6+
use Composer\DependencyResolver\Pool;
67
use Composer\Factory;
78
use Composer\Json\JsonFile;
89
use Composer\Package\BasePackage;
10+
use Composer\Package\Version\VersionSelector;
911
use Composer\Repository\CompositeRepository;
1012
use Composer\Repository\PlatformRepository;
1113
use Composer\Repository\RepositoryFactory;
@@ -31,6 +33,7 @@ protected function configure()
3133
new InputOption('homepage', null, InputOption::VALUE_REQUIRED, 'Homepage of package'),
3234
new InputOption('require', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"'),
3335
new InputOption('require-dev', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require for development with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"'),
36+
new InputOption('core', 'c', InputOption::VALUE_REQUIRED, 'Drupal Core or distribution with a version constraint, e.g. drupal/core or acquia/lightning~2.1 or "drupal/core 8.4.0"', 'drupal/core:^8.4'),
3437
new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum stability (empty or one of: '.implode(', ', array_keys(BasePackage::$stabilities)).')'),
3538
new InputOption('license', 'l', InputOption::VALUE_REQUIRED, 'License of package'),
3639
new InputOption('repository', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Add custom repositories, either by URL or using JSON arrays'),
@@ -56,7 +59,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
5659
$options['require'] = array_merge([
5760
'cweagans/composer-patches ^1.6.0',
5861
'hussainweb/drupal-composer-helper ^1.0',
59-
'drupal/core ^8.4',
62+
$input->getOption('core'),
6063
'drupal/console ^1.0.1',
6164
'drush/drush ~8.0|^9.0',
6265
], $options['require']);
@@ -260,6 +263,8 @@ function ($value) use ($self, $minimumStability) {
260263
);
261264
$input->setOption('license', $license);
262265

266+
$input->setOption('core', $this->getCore($input));
267+
263268
$io->writeError(['', 'Define your dependencies.', '']);
264269

265270
$question = 'Would you like to define your dependencies (require) now [<comment>yes</comment>]? ';
@@ -278,4 +283,42 @@ function ($value) use ($self, $minimumStability) {
278283
}
279284
$input->setOption('require-dev', $devRequirements);
280285
}
286+
287+
protected function getCore(InputInterface $input)
288+
{
289+
$io = $this->getIO();
290+
291+
$core = $input->getOption('core') ?: false;
292+
$core_version = $this->normalizeRequirements((array) $core);
293+
$core_version = reset($core_version);
294+
$core_package = $core_version['name'];
295+
296+
$core_package = $io->askAndValidate(
297+
'Drupal core or distribution [<comment>'.$core_package.'</comment>]: ',
298+
function ($value) {
299+
$packages = $this->findPackages($value);
300+
foreach ($packages as $package) {
301+
if ($package['name'] == $value) {
302+
return $value;
303+
}
304+
}
305+
throw new \Exception('Package not found');
306+
},
307+
null,
308+
$core_package
309+
);
310+
311+
$pool = new Pool($input->getOption('stability'));
312+
$pool->addRepository($this->getRepos());
313+
$versionSelector = new VersionSelector($pool);
314+
$package = $versionSelector->findBestCandidate($core_package);
315+
$core_version = $package ? $versionSelector->findRecommendedRequireVersion($package) : '';
316+
317+
$core_version = $io->ask(
318+
'Version for '.$core_package.' [<comment>'.$core_version.'</comment>]: ',
319+
$core_version
320+
);
321+
322+
return $core_package.' '.$core_version;
323+
}
281324
}

0 commit comments

Comments
 (0)