X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fdrupal%2Fconsole-extend-plugin%2Fsrc%2FExtender.php;h=186f3218ed3ffc12ea84f8daebabb2a2f963f608;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=5685fea13c2239b64247e41cbf8ddec2d32db508;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/drupal/console-extend-plugin/src/Extender.php b/vendor/drupal/console-extend-plugin/src/Extender.php index 5685fea13..186f3218e 100644 --- a/vendor/drupal/console-extend-plugin/src/Extender.php +++ b/vendor/drupal/console-extend-plugin/src/Extender.php @@ -5,10 +5,16 @@ namespace Drupal\Console\Composer\Plugin; use Composer\Composer; use Composer\IO\IOInterface; use Composer\Plugin\PluginInterface; -use Composer\Installer\PackageEvent; -use Composer\Installer\PackageEvents; +use Composer\Script\Event; +use Composer\Script\ScriptEvents; use Composer\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Yaml\Yaml; +use Symfony\Component\Finder\Finder; + +// Explicitly require ExtenderManager here. +// When this package is uninstalled, ExtenderManager needs to be available any +// time this class is available. +require_once __DIR__ . '/ExtenderManager.php'; class Extender implements PluginInterface, EventSubscriberInterface { @@ -39,30 +45,42 @@ class Extender implements PluginInterface, EventSubscriberInterface */ public static function getSubscribedEvents() { - return array( - PackageEvents::POST_PACKAGE_INSTALL => "processPackages", - PackageEvents::POST_PACKAGE_UPDATE => "processPackages", - PackageEvents::POST_PACKAGE_UNINSTALL => "processPackages", - ); + return [ + ScriptEvents::POST_INSTALL_CMD => "processPackages", + ScriptEvents::POST_UPDATE_CMD => "processPackages", + ]; } /** - * @param PackageEvent $event + * @param Event $event * @throws \Exception */ - public function processPackages(PackageEvent $event) + public function processPackages(Event $event) { $extenderManager = new ExtenderManager(); - $directory = realpath(__DIR__.'/../../../../'); - $extenderManager->processProjectPackages($directory); - - if (is_dir($directory.'/vendor/drupal/console')) { - $directory = $directory.'/vendor/drupal/console'; - } else { - $configFile = $directory.'/console.config.yml'; - $servicesFile = $directory.'/console.services.yml'; - $extenderManager->addConfigFile($configFile); - $extenderManager->addServicesFile($servicesFile); + + $composer = $event->getComposer(); + $installationManager = $composer->getInstallationManager(); + $repositoryManager = $composer->getRepositoryManager(); + $localRepository = $repositoryManager->getLocalRepository(); + + foreach ($localRepository->getPackages() as $package) { + if ($installationManager->isPackageInstalled($localRepository, $package)) { + if ($package->getType() === 'drupal-console-library') { + $extenderManager->addServicesFile($installationManager->getInstallPath($package) . '/console.services.yml'); + $extenderManager->addConfigFile($installationManager->getInstallPath($package) . '/console.config.yml'); + } + } + } + + if ($consolePackage = $localRepository->findPackage('drupal/console', '*')) { + if ($localRepository->hasPackage($consolePackage)) { + $directory = $installationManager->getInstallPath($consolePackage); + } + } + if (empty($directory)) { + // cwd should be the project root. This is the same logic Symfony uses. + $directory = getcwd(); } $configFile = $directory . '/extend.console.config.yml'; @@ -71,17 +89,20 @@ class Extender implements PluginInterface, EventSubscriberInterface if (file_exists($configFile)) { unlink($configFile); - $this->io->write('Removing config cache file:' . $configFile); + $this->io->write('Removing config cache file:'); + $this->io->write($configFile); } if (file_exists($servicesFile)) { unlink($servicesFile); - $this->io->write('Removing services cache file:' . $servicesFile); + $this->io->write('Removing packages services cache file:'); + $this->io->write($servicesFile); } if (file_exists($servicesUninstallFile)) { unlink($servicesUninstallFile); - $this->io->write('Removing services cache file:' . $servicesUninstallFile); + $this->io->write('Removing packages services cache file:'); + $this->io->write($servicesUninstallFile); } if ($configData = $extenderManager->getConfigData()) { @@ -89,7 +110,8 @@ class Extender implements PluginInterface, EventSubscriberInterface $configFile, Yaml::dump($configData, 6, 2) ); - $this->io->write('Creating config cache file:' . $configFile); + $this->io->write('Creating packages config cache file:'); + $this->io->write($configFile); } $servicesData = $extenderManager->getServicesData(); @@ -98,7 +120,8 @@ class Extender implements PluginInterface, EventSubscriberInterface $servicesFile, Yaml::dump($servicesData['install'], 4, 2) ); - $this->io->write('Creating services cache file: ' . $servicesFile); + $this->io->write('Creating packages services cache file: '); + $this->io->write($servicesFile); } $servicesData = $extenderManager->getServicesData(); @@ -107,7 +130,29 @@ class Extender implements PluginInterface, EventSubscriberInterface $servicesUninstallFile, Yaml::dump($servicesData['uninstall'], 4, 2) ); - $this->io->write('Creating services cache file: ' . $servicesUninstallFile); + $this->io->write('Creating packages services cache file: '); + $this->io->write($servicesUninstallFile); + } + + $this->removeCacheFiles($directory); + } + + protected function removeCacheFiles($directory) + { + try { + $finder = new Finder(); + $finder->files() + ->in($directory) + ->name('*-console.services.yml') + ->ignoreUnreadableDirs(); + + foreach ($finder as $file) { + $this->io->write('Removing site services cache file:'); + $this->io->write($file->getPathName()); + unlink($file->getPathName()); + } + } catch (\InvalidArgumentException $argumentException) { + $this->io->write('Cache file can not be deleted'); } } }