Issue #3080205 by greg.1.anderson: Implicitly allow drupal/core and legacy scaffold projects to scaffold files
parent
e70758877b
commit
6340ef5877
|
@ -62,6 +62,10 @@ class AllowedPackages implements PostPackageEventListenerInterface {
|
|||
/**
|
||||
* Gets a list of all packages that are allowed to copy scaffold files.
|
||||
*
|
||||
* We will implicitly allow the projects 'drupal/legacy-scaffold-assets'
|
||||
* and 'drupal/core' to scaffold files, if they are present. Any other
|
||||
* project must be explicitly whitelisted in the top-level composer.json
|
||||
* file in order to be allowed to override scaffold files.
|
||||
* Configuration for packages specified later will override configuration
|
||||
* specified by packages listed earlier. In other words, the last listed
|
||||
* package has the highest priority. The root package will always be returned
|
||||
|
@ -71,12 +75,12 @@ class AllowedPackages implements PostPackageEventListenerInterface {
|
|||
* An array of allowed Composer packages.
|
||||
*/
|
||||
public function getAllowedPackages() {
|
||||
$options = $this->manageOptions->getOptions();
|
||||
$allowed_packages = $this->recursiveGetAllowedPackages($options->allowedPackages());
|
||||
$top_level_packages = $this->getTopLevelAllowedPackages();
|
||||
$allowed_packages = $this->recursiveGetAllowedPackages($top_level_packages);
|
||||
// If the root package defines any file mappings, then implicitly add it
|
||||
// to the list of allowed packages. Add it at the end so that it overrides
|
||||
// all the preceding packages.
|
||||
if ($options->hasFileMapping()) {
|
||||
if ($this->manageOptions->getOptions()->hasFileMapping()) {
|
||||
$root_package = $this->composer->getPackage();
|
||||
unset($allowed_packages[$root_package->getName()]);
|
||||
$allowed_packages[$root_package->getName()] = $root_package;
|
||||
|
@ -97,6 +101,26 @@ class AllowedPackages implements PostPackageEventListenerInterface {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all packages that are allowed in the top-level composer.json.
|
||||
*
|
||||
* We will implicitly allow the projects 'drupal/legacy-scaffold-assets'
|
||||
* and 'drupal/core' to scaffold files, if they are present. Any other
|
||||
* project must be explicitly whitelisted in the top-level composer.json
|
||||
* file in order to be allowed to override scaffold files.
|
||||
*
|
||||
* @return array
|
||||
* An array of allowed Composer package names.
|
||||
*/
|
||||
protected function getTopLevelAllowedPackages() {
|
||||
$implicit_packages = [
|
||||
'drupal/legacy-scaffold-assets',
|
||||
'drupal/core',
|
||||
];
|
||||
$top_level_packages = $this->manageOptions->getOptions()->allowedPackages();
|
||||
return array_merge($implicit_packages, $top_level_packages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a name-to-package mapping from a list of package names.
|
||||
*
|
||||
|
|
|
@ -224,7 +224,10 @@ class Handler {
|
|||
if ($options->hasFileMapping()) {
|
||||
return $this->createScaffoldOperations($package, $options->fileMapping());
|
||||
}
|
||||
if (!$options->hasAllowedPackages()) {
|
||||
// Warn the user if they allow a package that does not have any scaffold
|
||||
// files. We will ignore drupal/core, though, as it is implicitly allowed,
|
||||
// but might not have scaffold files (version 8.7.x and earlier).
|
||||
if (!$options->hasAllowedPackages() && ($package->getName() != 'drupal/core')) {
|
||||
$this->io->writeError("The allowed package {$package->getName()} does not provide a file mapping for Composer Scaffold.");
|
||||
}
|
||||
return [];
|
||||
|
|
Loading…
Reference in New Issue