comparison vendor/composer/installers/src/Composer/Installers/Installer.php @ 17:129ea1e6d783

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:21:36 +0000
parents 7a779792577d
children
comparison
equal deleted inserted replaced
16:c2387f117808 17:129ea1e6d783
1 <?php 1 <?php
2
2 namespace Composer\Installers; 3 namespace Composer\Installers;
3 4
5 use Composer\Composer;
6 use Composer\Installer\BinaryInstaller;
7 use Composer\Installer\LibraryInstaller;
4 use Composer\IO\IOInterface; 8 use Composer\IO\IOInterface;
5 use Composer\Installer\LibraryInstaller;
6 use Composer\Package\PackageInterface; 9 use Composer\Package\PackageInterface;
7 use Composer\Repository\InstalledRepositoryInterface; 10 use Composer\Repository\InstalledRepositoryInterface;
11 use Composer\Util\Filesystem;
8 12
9 class Installer extends LibraryInstaller 13 class Installer extends LibraryInstaller
10 { 14 {
15
11 /** 16 /**
12 * Package types to installer class map 17 * Package types to installer class map
13 * 18 *
14 * @var array 19 * @var array
15 */ 20 */
21 'annotatecms' => 'AnnotateCmsInstaller', 26 'annotatecms' => 'AnnotateCmsInstaller',
22 'bitrix' => 'BitrixInstaller', 27 'bitrix' => 'BitrixInstaller',
23 'bonefish' => 'BonefishInstaller', 28 'bonefish' => 'BonefishInstaller',
24 'cakephp' => 'CakePHPInstaller', 29 'cakephp' => 'CakePHPInstaller',
25 'chef' => 'ChefInstaller', 30 'chef' => 'ChefInstaller',
31 'civicrm' => 'CiviCrmInstaller',
26 'ccframework' => 'ClanCatsFrameworkInstaller', 32 'ccframework' => 'ClanCatsFrameworkInstaller',
27 'cockpit' => 'CockpitInstaller', 33 'cockpit' => 'CockpitInstaller',
28 'codeigniter' => 'CodeIgniterInstaller', 34 'codeigniter' => 'CodeIgniterInstaller',
29 'concrete5' => 'Concrete5Installer', 35 'concrete5' => 'Concrete5Installer',
30 'craft' => 'CraftInstaller', 36 'craft' => 'CraftInstaller',
101 'zikula' => 'ZikulaInstaller', 107 'zikula' => 'ZikulaInstaller',
102 'prestashop' => 'PrestashopInstaller' 108 'prestashop' => 'PrestashopInstaller'
103 ); 109 );
104 110
105 /** 111 /**
112 * Installer constructor.
113 *
114 * Disables installers specified in main composer extra installer-disable
115 * list
116 *
117 * @param IOInterface $io
118 * @param Composer $composer
119 * @param string $type
120 * @param Filesystem|null $filesystem
121 * @param BinaryInstaller|null $binaryInstaller
122 */
123 public function __construct(
124 IOInterface $io,
125 Composer $composer,
126 $type = 'library',
127 Filesystem $filesystem = null,
128 BinaryInstaller $binaryInstaller = null
129 ) {
130 parent::__construct($io, $composer, $type, $filesystem,
131 $binaryInstaller);
132 $this->removeDisabledInstallers();
133 }
134
135 /**
106 * {@inheritDoc} 136 * {@inheritDoc}
107 */ 137 */
108 public function getInstallPath(PackageInterface $package) 138 public function getInstallPath(PackageInterface $package)
109 { 139 {
110 $type = $package->getType(); 140 $type = $package->getType();
195 */ 225 */
196 private function getIO() 226 private function getIO()
197 { 227 {
198 return $this->io; 228 return $this->io;
199 } 229 }
230
231 /**
232 * Look for installers set to be disabled in composer's extra config and
233 * remove them from the list of supported installers.
234 *
235 * Globals:
236 * - true, "all", and "*" - disable all installers.
237 * - false - enable all installers (useful with
238 * wikimedia/composer-merge-plugin or similar)
239 *
240 * @return void
241 */
242 protected function removeDisabledInstallers()
243 {
244 $extra = $this->composer->getPackage()->getExtra();
245
246 if (!isset($extra['installer-disable']) || $extra['installer-disable'] === false) {
247 // No installers are disabled
248 return;
249 }
250
251 // Get installers to disable
252 $disable = $extra['installer-disable'];
253
254 // Ensure $disabled is an array
255 if (!is_array($disable)) {
256 $disable = array($disable);
257 }
258
259 // Check which installers should be disabled
260 $all = array(true, "all", "*");
261 $intersect = array_intersect($all, $disable);
262 if (!empty($intersect)) {
263 // Disable all installers
264 $this->supportedTypes = array();
265 } else {
266 // Disable specified installers
267 foreach ($disable as $key => $installer) {
268 if (is_string($installer) && key_exists($installer, $this->supportedTypes)) {
269 unset($this->supportedTypes[$installer]);
270 }
271 }
272 }
273 }
200 } 274 }