-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathPlugin.php
74 lines (68 loc) · 3.41 KB
/
Plugin.php
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
<?php
namespace zaporylie\ComposerDrupalOptimizations;
use Composer\Composer;
use Composer\Factory;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;
use Composer\Repository\RepositoryFactory;
use Composer\Repository\RepositoryManager;
use Composer\Semver\Constraint\Constraint;
use Composer\Semver\Constraint\ConstraintInterface;
class Plugin implements PluginInterface
{
public function activate(Composer $composer, IOInterface $io)
{
// Set default version constraints based on the composer requirements.
$extra = $composer->getPackage()->getExtra();
$packages = $composer->getPackage()->getRequires();
if (!isset($extra['composer-drupal-optimizations']['require'])) {
$package = isset($packages['drupal/core']) ? $packages['drupal/core'] : (isset($packages['drupal/core-recommended']) ? $packages['drupal/core-recommended'] : null);
if (isset($package)) {
$coreConstraint = $package->getConstraint();
$extra['composer-drupal-optimizations']['require'] = static::getDefaultRequire($coreConstraint);
if (!empty($extra['composer-drupal-optimizations']['require']) && $io->isVerbose()) {
$io->write('Required tags were not explicitly set so the zaporylie/composer-drupal-optimizations set default based on project\'s composer.json content.');
}
}
}
if (!empty($extra['composer-drupal-optimizations']['require']) && $io->isVerbose()) {
foreach ($extra['composer-drupal-optimizations']['require'] as $package => $version) {
$io->write(sprintf('extra.commerce-drupal-optimizations.require.%s: \'%s\'', $package, $version));
}
}
$rfs = Factory::createRemoteFilesystem($io, $composer->getConfig());
$manager = RepositoryFactory::manager($io, $composer->getConfig(), $composer->getEventDispatcher(), $rfs);
$setRepositories = \Closure::bind(function (RepositoryManager $manager) use ($extra) {
$manager->repositoryClasses = $this->repositoryClasses;
$manager->setRepositoryClass('composer', TruncatedComposerRepository::class);
$manager->repositories = $this->repositories;
$i = 0;
foreach (RepositoryFactory::defaultRepos(null, $this->config, $manager) as $repo) {
$manager->repositories[$i++] = $repo;
if ($repo instanceof TruncatedComposerRepository && !empty($extra['composer-drupal-optimizations']['require'])) {
$repo->setRequiredVersionConstraints($extra['composer-drupal-optimizations']['require']);
}
}
$manager->setLocalRepository($this->getLocalRepository());
}, $composer->getRepositoryManager(), RepositoryManager::class);
$setRepositories($manager);
$composer->setRepositoryManager($manager);
}
/**
* Negotiates default require constraint and package for given drupal/core.
*
* @param \Composer\Semver\Constraint\ConstraintInterface
*
* @return array
*/
static public function getDefaultRequire(ConstraintInterface $coreConstraint)
{
if ((new Constraint('>=', '8.5.0'))->matches($coreConstraint)
&& !(new Constraint('<', '8.5.0'))->matches($coreConstraint)) {
return [
'symfony/symfony' => '>3.4',
];
}
return [];
}
}