diff --git a/scripts/composer/ScriptHandler.php b/scripts/composer/ScriptHandler.php new file mode 100644 index 00000000..a043c0f3 --- /dev/null +++ b/scripts/composer/ScriptHandler.php @@ -0,0 +1,98 @@ +exists($root . '/'. $dir)) { + $fs->mkdir($root . '/'. $dir); + $fs->touch($root . '/'. $dir . '/.gitkeep'); + } + } + + // Prepare the settings file for installation + if (!$fs->exists($root . '/sites/default/settings.php') and $fs->exists($root . '/sites/default/default.settings.php')) { + $fs->copy($root . '/sites/default/default.settings.php', $root . '/sites/default/settings.php'); + $fs->chmod($root . '/sites/default/settings.php', 0666); + $event->getIO()->write("Create a sites/default/settings.php file with chmod 0666"); + } + + // Prepare the services file for installation + if (!$fs->exists($root . '/sites/default/services.yml') and $fs->exists($root . '/sites/default/default.services.yml')) { + $fs->copy($root . '/sites/default/default.services.yml', $root . '/sites/default/services.yml'); + $fs->chmod($root . '/sites/default/services.yml', 0666); + $event->getIO()->write("Create a sites/default/services.yml file with chmod 0666"); + } + + // Create the files directory with chmod 0777 + if (!$fs->exists($root . '/sites/default/files')) { + $oldmask = umask(0); + $fs->mkdir($root . '/sites/default/files', 0777); + umask($oldmask); + $event->getIO()->write("Create a sites/default/files directory with chmod 0777"); + } + } + + /** + * Checks if the installed version of Composer is compatible. + * + * Composer 1.0.0 and higher consider a `composer install` without having a + * lock file present as equal to `composer update`. We do not ship with a lock + * file to avoid merge conflicts downstream, meaning that if a project is + * installed with an older version of Composer the scaffolding of Drupal will + * not be triggered. We check this here instead of in drupal-scaffold to be + * able to give immediate feedback to the end user, rather than failing the + * installation after going through the lengthy process of compiling and + * downloading the Composer dependencies. + * + * @see https://github.com/composer/composer/pull/5035 + */ + public static function checkComposerVersion(Event $event) { + $composer = $event->getComposer(); + $io = $event->getIO(); + + $version = $composer::VERSION; + + // The dev-channel of composer uses the git revision as version number, + // try to the branch alias instead. + if (preg_match('/^[0-9a-f]{40}$/i', $version)) { + $version = $composer::BRANCH_ALIAS_VERSION; + } + + // If Composer is installed through git we have no easy way to determine if + // it is new enough, just display a warning. + if ($version === '@package_version@' || $version === '@package_branch_alias_version@') { + $io->writeError('You are running a development version of Composer. If you experience problems, please update Composer to the latest stable version.'); + } + elseif (Comparator::lessThan($version, '1.0.0')) { + $io->writeError('Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing.'); + exit(1); + } + } + +}