X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=inline;f=vendor%2Fdrupal%2Fconsole-extend-plugin%2Fsrc%2FExtender.php;h=84e8a4fe6fee74e6e61ff37f14a8e8d71c986608;hb=eba34333e3c89f208d2f72fa91351ad019a71583;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..84e8a4fe6 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'; @@ -109,5 +127,34 @@ class Extender implements PluginInterface, EventSubscriberInterface ); $this->io->write('Creating services cache file: ' . $servicesUninstallFile); } + + $this->removeCacheFiles(); + } + + protected function removeCacheFiles() + { + if (is_dir(getcwd().'/console/cache/')) { + try { + $finder = new Finder(); + $finder->files() + ->in(getcwd() . '/console/cache/') + ->ignoreUnreadableDirs(); + + foreach ($finder as $file) { + unlink($file->getPathName()); + } + + $finder->directories() + ->in(getcwd() . '/console/cache/') + ->ignoreUnreadableDirs(); + + foreach ($finder as $directory) { + rmdir($directory); + } + + } catch (\InvalidArgumentException $argumentException) { + $this->io->write('Cache files can not be deleted'); + } + } } }