PackageGenerator.php in Drupal 10
File
composer/Generator/PackageGenerator.php
View source
<?php
namespace Drupal\Composer\Generator;
use Drupal\Composer\Generator\Builder\DrupalCoreRecommendedBuilder;
use Drupal\Composer\Generator\Builder\DrupalDevDependenciesBuilder;
use Drupal\Composer\Generator\Builder\DrupalPinnedDevDependenciesBuilder;
use Drupal\Composer\Generator\Util\DrupalCoreComposer;
use Composer\Util\Filesystem;
use Composer\IO\IOInterface;
class PackageGenerator {
protected $generatedProjectBaseDir;
public function __construct() {
$this->generatedProjectBaseDir = dirname(__DIR__) . '/Metapackage';
}
public function generate(IOInterface $io, $base_dir) {
$drupalCoreInfo = DrupalCoreComposer::createFromPath($base_dir);
if (empty($drupalCoreInfo
->composerLock())) {
return;
}
$builders = $this
->builders();
$changed = FALSE;
foreach ($builders as $builder_class) {
$builder = new $builder_class($drupalCoreInfo);
$changed |= $this
->generateMetapackage($io, $builder);
}
if ($changed) {
$io
->write("If you make a patch, ensure that the files above are included.");
}
}
protected function builders() {
return [
DrupalCoreRecommendedBuilder::class,
DrupalDevDependenciesBuilder::class,
DrupalPinnedDevDependenciesBuilder::class,
];
}
protected function generateMetapackage(IOInterface $io, BuilderInterface $builder) {
$relative_path = $builder
->getPath() . '/composer.json';
$composer_json_path = $this->generatedProjectBaseDir . '/' . $relative_path;
$original_composer_json = file_exists($composer_json_path) ? file_get_contents($composer_json_path) : '';
$composer_json_data = $builder
->getPackage();
$updated_composer_json = static::encode($composer_json_data);
if (trim($original_composer_json, " \t\r\0\v") == trim($updated_composer_json, " \t\r\0\v")) {
return FALSE;
}
$io
->write("Updated metapackage file <info>composer/Metapackage/{$relative_path}</info>.");
$fs = new Filesystem();
$fs
->ensureDirectoryExists(dirname($composer_json_path));
file_put_contents($composer_json_path, $updated_composer_json);
return TRUE;
}
public static function encode($composer_json_data) {
return json_encode($composer_json_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";
}
}