X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fdrush%2Fdrush%2Fsrc%2FDrupal%2FFindCommandsCompilerPass.php;fp=vendor%2Fdrush%2Fdrush%2Fsrc%2FDrupal%2FFindCommandsCompilerPass.php;h=9c9ce9b038447d0db6e77f98c0fafb2f23c15020;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=0000000000000000000000000000000000000000;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0;p=yaffs-website diff --git a/vendor/drush/drush/src/Drupal/FindCommandsCompilerPass.php b/vendor/drush/drush/src/Drupal/FindCommandsCompilerPass.php new file mode 100644 index 000000000..9c9ce9b03 --- /dev/null +++ b/vendor/drush/drush/src/Drupal/FindCommandsCompilerPass.php @@ -0,0 +1,70 @@ +boot(), when Drupal's dependency injection container is being + * compiled. Since we cannot use the container at this point (since its + * initialization is not yet complete), we instead alter the definition of + * a storage class in the container to add more setter injection method + * calls to 'addCommandReference'. + * + * Later, after the container has been completely initialized, we can + * fetch the storage class from the DI container (perhaps also via + * injection from a reference in the container). At that point, we can + * request the list of Console commands that were added via the + * (delayed) call(s) to addCommandReference. + * + * Documentation: + * + * http://symfony.com/doc/2.7/components/dependency_injection/tags.html#create-a-compilerpass + */ +class FindCommandsCompilerPass implements CompilerPassInterface +{ + protected $storageClassId; + protected $tagId; + + public function __construct($storageClassId, $tagId) + { + $this->storageClassId = $storageClassId; + $this->tagId = $tagId; + } + + public function process(ContainerBuilder $container) + { + drush_log(dt("process !storage !tag", ['!storage' => $this->storageClassId, '!tag' => $this->tagId]), LogLevel::DEBUG); + // We expect that our called registered the storage + // class under the storage class id before adding this + // compiler pass, but we will test this presumption to be sure. + if (!$container->has($this->storageClassId)) { + drush_log(dt("storage class not registered"), LogLevel::DEBUG); + return; + } + + $definition = $container->findDefinition( + $this->storageClassId + ); + + $taggedServices = $container->findTaggedServiceIds( + $this->tagId + ); + foreach ($taggedServices as $id => $tags) { + drush_log(dt("Found tagged service !id", ['!id' => $id]), LogLevel::DEBUG_NOTIFY); + $definition->addMethodCall( + 'addCommandReference', + [new Reference($id)] + ); + } + } +}