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');
+ }
+ }
}
}