it-swarm.com.de

`composer require` schlägt fehl, weil" Quellverzeichnis docroot / core nicht festgeschriebene Änderungen hat "

Symptom : Sie haben ein Skript, das beim Ausführen eines composer require - Befehls fehlschlägt und zu einer Ausgabe wie der folgenden führt:

$ ./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.

Der Versuch, den fehlerhaften Befehl composer require Manuell auszuführen, führt zu einer Ausgabe wie der folgenden:

$ 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,?]?

Bedingungen : Sie verwenden Composer, um Ihre Drupal Site-Abhängigkeiten zu verwalten und Patches mit cweagans/composer-patches Anzuwenden. Sie können Acquia BLT verwenden.

6
TravisCarden

Erläuterung: Das Problem ist, dass cweagans/composer-patches wendet Patches auf Drupal Core nach dem Klonen an und führt Composer, um zu glauben, dass Sie die betroffenen Dateien geändert haben, und fordert Sie daher auf, sie zu überschreiben, damit sie nicht überschrieben werden) Sie verlieren unabsichtlich die laufende Arbeit.

Lösung: Configure Composer to discard-changes welche "[setzt] den Standardstil für den Umgang mit schmutzigen Updates im nicht interaktiven Modus ... [um] Änderungen bei Anbietern immer zu verwerfen", und ändern Sie dann Ihr Skript, um das --no-interaction (oder -n) Flagge. Z.B.:

$ 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
8
TravisCarden