/** * Displays a list of all extensions not present in the project composer.json. * * Did you add a module without using composer, and it has a composer.json * file? It will show up in this list. * * @param Event $event * Script event provided by Composer. */ public static function listUnmanagedExtensions(Event $event) { $root_dir = static::getRootDir(); $finder = new ComposerFinder(); $unmanaged_extensions = $finder->getUnmanagedComposerExtensions($root_dir, $event->getComposer()); $extensions = []; foreach ($unmanaged_extensions as $unmanaged_extension) { $extensions[] = $unmanaged_extension->getName(); } $event->getIO()->write(' Unmanaged extensions with composer.json files: <info>' . implode(', ', $extensions) . '</info>'); }
/** * @dataProvider provideModuleFilesystem */ public function testGetComposerExtensions($expected_composer_count, $filesystem) { // Set up the filesystem. $root = vfsStream::setup('test', NULL, $filesystem); $finder = new ComposerFinder(); $extensions = $finder->getComposerExtensions(vfsStream::url('test'), FALSE); // Make sure we got the right number of results. $this->assertEquals($expected_composer_count, count($extensions)); // Check for expected modules. $modules = ['deps', 'site_deps']; foreach ($modules as $module) { $this->assertArrayHasKey($module, $extensions); } }
/** * Perform the merge for Drupal extensions. * * Given a root directory for the Drupal installation and a Composer package * representing the root installation, merge composer.json files from * discovered extensions/modules. * * @param string $root_dir * Root directory of the Drupal installation. Usually this is the same as * the directory where the composer.json file lives, but it might not be. * @param \Composer\Composer $composer * The Composer object. */ protected function mergeExtensionDependenciesForRoot($root_dir, Composer $composer) { // Glean the root package. $root_package = $composer->getPackage(); $finder = new ComposerFinder(); $unmanaged_dependencies = $finder->getUnmanagedComposerExtensions($root_dir, $composer); foreach ($unmanaged_dependencies as $dependency) { $this->mergeFile($root_package, $dependency->getComposerJsonFile()->getPath()); } }