Symptôme: Vous avez un script qui échoue lors de l'exécution d'une commande composer require
, Résultant en une sortie comme celle-ci:
$ ./example.sh
Gathering patches for root package.
Removing package drupal/core so that it can be re-installed and re-patched.
- Removing drupal/core (8.6.x-dev)
In VcsDownloader.php line 242:
Source directory docroot/core has uncommitted changes.
Tenter d'exécuter manuellement la commande composer require
Incriminée entraîne une sortie comme celle-ci:
$ composer require drupal/examples
Gathering patches for root package.
Removing package drupal/core so that it can be re-installed and re-patched.
- Removing drupal/core (8.6.x-dev)
The package has modified files:
M core.services.yml
M includes/install.core.inc
M includes/install.inc
M lib/Drupal/Core/Config/ConfigInstaller.php
M lib/Drupal/Core/Config/ExtensionInstallStorage.php
M lib/Drupal/Core/Config/InstallStorage.php
M lib/Drupal/Core/Entity/EntityViewBuilder.php
M lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
M lib/Drupal/Core/Extension/ExtensionDiscovery.php
M lib/Drupal/Core/Extension/ModuleExtensionList.php
19 more files modified, choose "v" to view the full list
Discard changes [y,n,v,d,?]?
Conditions: Vous utilisez Composer pour gérer vos dépendances de site Drupal et appliquez des correctifs avec cweagans/composer-patches
. Vous pouvez utiliser Acquia BLT.
Explication: Le problème est que cweagans/composer-patches
applique des correctifs à Drupal Core après le clonage, menant Composer à croire que vous avez modifié les fichiers affectés et donc à vous inviter à les écraser de peur vous perdez involontairement un travail en cours.
Solution: Configurez Composer to discard-changes
qui "[définit] le style par défaut de gestion des mises à jour sales en mode non interactif ... [pour] toujours rejeter les modifications chez les fournisseurs", puis modifiez votre script pour passer le --no-interaction
(ou -n
) drapeau. Par exemple.:
$ composer config discard-changes true
$ composer require -n drupal/examples
Using version 1.x-dev for drupal/examples
./composer.json has been updated
Gathering patches for root package.
Removing package drupal/core so that it can be re-installed and re-patched.
- Removing drupal/core (8.6.x-dev)
Deleting docroot/core - deleted
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
Gathering patches for root package.
No patches supplied.
Gathering patches for dependencies. This might take a minute.
- Installing drupal/core (8.6.x-dev 8dbf42a): Cloning 8dbf42a90c from cache
- Applying patches for drupal/core
https://www.drupal.org/files/issues/2869592-remove-update-warning-7.patch (2869592 - Disabled update module shouldn't produce a status report warning)
https://www.drupal.org/files/issues/2885441-2.patch (2885441 - EntityReferenceAutocompleteWidget should define its size setting as an integer)
https://www.drupal.org/files/issues/2018-09-24/2815221-109.patch (2815221 - Add quickedit to the latest-revision route)
https://www.drupal.org/files/issues/2018-10-12/1356276-531.patch (1356276 - Allow profiles to define a base/parent profile and load them in the correct order)
https://www.drupal.org/files/issues/2018-07-09/2914389-8-do-not-test.patch (2914389 - Allow profiles to exclude dependencies of their parent)
Writing lock file
Generating autoload files