5

Symptom: You have a script that fails while executing a composer require command, resulting in output like the following:

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

Attempting to execute the offending composer require command manually results in output like the following:

$ 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: You are using Composer to manage your Drupal site dependencies and applying patches with cweagans/composer-patches. You may be using Acquia BLT.

7

Explanation: The problem is that cweagans/composer-patches is applying patches to Drupal Core after cloning it, leading Composer to believe you've modified the affected files and therefore to prompt you to overwrite them lest you unwittingly lose work in progress.

Solution: Configure Composer to discard-changes which "[sets] the default style of handling dirty updates when in non-interactive mode... [to] always discard changes in vendors", then modify your script to pass the --no-interaction (or -n) flag. E.g.:

$ 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

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.