Skip to content

composer update (install step removed packages) fails because plugin-installer invokes autoloader #38

@mstilkerich

Description

@mstilkerich

Hello,

I have received reports of issues when upgrading to roundcube 1.6.0 (e.g. from 1.5.3), when the rcmcarddav plugin is also installed and upgraded during the process in the composer update --no-dev step. This problem will very likely apply with any other roundcube plugin installed using plugin-installer as well.

The problem seems to be the following:

  • Some packages that were required by roundcube 1.5 are not required by roundcube 1.6 anymore.
  • During the install step of composer update, these packages are removed first.
  • When rcmcarddav is upgraded, the plugin code of plugin-installer is invoked. It appears to use the composer autoloader, which at this point apparently has not been updated yet. The autoloader tries to load the files of the packages that have already been removed, causing the process to die.

Running composer update --no-dev --no-plugins shows that the problem does not occur then, which confirms that the autoloader is loaded because of the plugin-installer code. However, I guess the plugin-installer code does some required actions and therefore this is not a valid workaround.

I'm not sure if this is a problem with plugin-installer or with the composer install process itself, i.e. if composer should have updated the autoloader before calling the plugin code first, or whether the plugin code is not supposed to use the autoloader.

A full log of the composer call for reference:

Loading composer repositories with package information
Updating dependencies
Lock file operations: 4 installs, 6 updates, 4 removals
  - Removing endroid/qr-code (1.6.6)
  - Removing symfony/polyfill-intl-idn (v1.26.0)
  - Removing symfony/polyfill-intl-normalizer (v1.26.0)
  - Removing symfony/polyfill-php72 (v1.26.0)
  - Locking bacon/bacon-qr-code (2.0.7)
  - Locking dasprid/enum (1.0.3)
  - Upgrading guzzlehttp/guzzle (6.5.8 => 7.4.5)
  - Upgrading guzzlehttp/psr7 (1.9.0 => 2.4.0)
  - Upgrading mstilkerich/carddavclient (v1.2.1 => v1.2.2)
  - Locking psr/http-factory (1.0.1)
  - Upgrading roundcube/carddav (v4.4.1 => v4.4.2)
  - Upgrading sabre/vobject (4.4.2 => 4.4.3)
  - Locking symfony/deprecation-contracts (v2.5.2)
  - Upgrading symfony/yaml (v4.4.43 => v4.4.44)
Writing lock file
Installing dependencies from lock file
Package operations: 4 installs, 5 updates, 4 removals
  - Removing symfony/polyfill-php72 (v1.26.0)
  - Removing symfony/polyfill-intl-normalizer (v1.26.0)
  - Removing symfony/polyfill-intl-idn (v1.26.0)
  - Removing endroid/qr-code (1.6.6)
  - Installing dasprid/enum (1.0.3): Extracting archive
  - Installing bacon/bacon-qr-code (2.0.7): Extracting archive
  - Installing symfony/deprecation-contracts (v2.5.2): Extracting archive
  - Installing psr/http-factory (1.0.1): Extracting archive
  - Upgrading guzzlehttp/psr7 (1.9.0 => 2.4.0): Extracting archive
  - Upgrading guzzlehttp/guzzle (6.5.8 => 7.4.5): Extracting archive
  - Upgrading sabre/vobject (4.4.2 => 4.4.3): Extracting archive
  - Upgrading mstilkerich/carddavclient (v1.2.1 => v1.2.2): Extracting archive
    Update of roundcube/carddav failed
 8/8 [============================] 100%
In autoload_real.php line 59:

  require(/tmp/rcold/roundcube/vendor/composer/../symfony/polyfill-php72/bootstrap.php): failed to open stream: No such file or directory

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions