zaporylie / composer-drupal-optimizations

Saves memory and CPU cycles when you run `composer update`
141 stars 16 forks source link

[ErrorException] Undefined index: extra #18

Closed eiriksm closed 3 years ago

eiriksm commented 3 years ago

Steps to reproduce:

composer create-project drupal/recommended-project site-name
cd site-name
composer require 'zaporylie/composer-drupal-optimizations:^1.1' --dev
composer config repositories.giftcards vcs https://github.com/md-systems/commerce_giftcard
# Verbose output added to make it more obvious where the error comes from
composer require drupal/commerce_giftcard -vvv
Berdir commented 3 years ago

Ah, it's not just us then. Just came here to report this as well.

FWIW, it's not the fault of commerce_giftcard or related to that, it's enough to just run composer update after requiring this.

nevergone commented 3 years ago

This is critical issue, abort every composer-related operations. :(

info999 commented 3 years ago

composer update returns [ErrorException] Undefined index: extra

Exception trace: at /var/www/drupal/irbis/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php:76

tobiaseichert commented 3 years ago

The same error occured to me when trying to update Core using drupal/core-recommended. We don't use custom VCS repos in our composer.json.

T2L commented 3 years ago

Seeing this as well, no VCS repositories

Exception trace:
 () at ~/.composer/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php:76
 Composer\Util\ErrorHandler::handle() at ~/.composer/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php:76
 zaporylie\ComposerDrupalOptimizations\Cache->removeLegacyTags() at ~/.composer/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php:21
 zaporylie\ComposerDrupalOptimizations\TruncatedComposerRepository->fetchFile() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/Repository/ComposerRepository.php:366
 Composer\Repository\ComposerRepository->whatProvides() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/DependencyResolver/Pool.php:204
 Composer\DependencyResolver\Pool->computeWhatProvides() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/DependencyResolver/Pool.php:193
 Composer\DependencyResolver\Pool->whatProvides() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/DependencyResolver/RuleSetGenerator.php:164
 Composer\DependencyResolver\RuleSetGenerator->whitelistFromPackage() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/DependencyResolver/RuleSetGenerator.php:353
 Composer\DependencyResolver\RuleSetGenerator->getRulesFor() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/DependencyResolver/Solver.php:217
 Composer\DependencyResolver\Solver->solve() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/Installer.php:489
 Composer\Installer->doInstall() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/Installer.php:232
 Composer\Installer->run() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/Command/UpdateCommand.php:163
 Composer\Command\UpdateCommand->execute() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/vendor/symfony/console/Command/Command.php:245
 Symfony\Component\Console\Command\Command->run() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/vendor/symfony/console/Application.php:835
 Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/vendor/symfony/console/Application.php:185
 Symfony\Component\Console\Application->doRun() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/Console/Application.php:281
 Composer\Console\Application->doRun() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/vendor/symfony/console/Application.php:117
 Symfony\Component\Console\Application->run() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/src/Composer/Console/Application.php:113
 Composer\Console\Application->run() at phar:///usr/local/Cellar/composer/1.10.5/bin/composer/bin/composer:61
 require() at /usr/local/Cellar/composer/1.10.5/bin/composer:24
Berdir commented 3 years ago

Seems to happen on the symfony/symfony project according to $packageName

Berdir commented 3 years ago

And adding a ?? 'master' as fallback if dev-master branch alias is not set seems to work, but no idea if that's the right fix.

T2L commented 3 years ago

symfony/symfony already has $composerJson['version_normalized'] set, thus nothing in $composerJson['extra']['branch-alias']['dev-master']

Array
(
    [name] => symfony/symfony
    [description] => The Symfony PHP framework
    [keywords] => Array
        (
            [0] => framework
        )

    [homepage] => https://symfony.com
    [version] => dev-master
    [version_normalized] => 9999999-dev
    [license] => Array
        (
            [0] => MIT
        )

    [authors] => Array
        (
            [0] => Array
                (
                    [name] => Fabien Potencier
                    [email] => fabien@symfony.com
                )

            [1] => Array
                (
                    [name] => Symfony Community
                    [homepage] => https://symfony.com/contributors
                )

        )

    [source] => Array
        (
            [type] => git
            [url] => https://github.com/symfony/symfony.git
            [reference] => 5f1c3a797247a6d54992384df00bb22741fc1c34
        )

    [dist] => Array
        (
            [type] => zip
            [url] => https://api.github.com/repos/symfony/symfony/zipball/5f1c3a797247a6d54992384df00bb22741fc1c34
            [reference] => 5f1c3a797247a6d54992384df00bb22741fc1c34
            [shasum] => 
        )

    [type] => library
    [funding] => Array
        (
            [0] => Array
                (
                    [url] => https://symfony.com/sponsor
                    [type] => custom
                )

            [1] => Array
                (
                    [url] => https://github.com/fabpot
                    [type] => github
                )

            [2] => Array
                (
                    [url] => https://tidelift.com/funding/github/packagist/symfony/symfony
                    [type] => tidelift
                )

        )

    [time] => 2020-10-06T08:20:59+00:00
    [autoload] => Array
        (
            [psr-4] => Array
                (
                    [Symfony\Bridge\Doctrine\] => src/Symfony/Bridge/Doctrine/
                    [Symfony\Bridge\Monolog\] => src/Symfony/Bridge/Monolog/
                    [Symfony\Bridge\ProxyManager\] => src/Symfony/Bridge/ProxyManager/
                    [Symfony\Bridge\Twig\] => src/Symfony/Bridge/Twig/
                    [Symfony\Bundle\] => src/Symfony/Bundle/
                    [Symfony\Component\] => src/Symfony/Component/
                )

            [classmap] => Array
                (
                    [0] => src/Symfony/Component/Intl/Resources/stubs
                )

            [exclude-from-classmap] => Array
                (
                    [0] => **/Tests/
                )

        )

    [default-branch] => 1
    [require] => Array
        (
            [php] => >=7.2.5
            [ext-xml] => *
            [doctrine/event-manager] => ~1.0
            [twig/twig] => ^2.10|^3.0
            [psr/cache] => ~1.0
            [psr/container] => ^1.0
            [psr/event-dispatcher] => ^1.0
            [psr/link] => ^1.0
            [psr/log] => ~1.0
            [symfony/contracts] => ^2.1
            [symfony/polyfill-ctype] => ~1.8
            [symfony/polyfill-intl-grapheme] => ~1.0
            [symfony/polyfill-intl-icu] => ~1.0
            [symfony/polyfill-intl-idn] => ^1.10
            [symfony/polyfill-intl-normalizer] => ~1.0
            [symfony/polyfill-mbstring] => ~1.0
            [symfony/polyfill-php73] => ^1.11
            [symfony/polyfill-php80] => ^1.15
            [symfony/polyfill-uuid] => ^1.15
            [doctrine/persistence] => ^1.3|^2
        )

    [require-dev] => Array
        (
            [amphp/http-tunnel] => ^1.0
            [async-aws/ses] => ^1.0
            [async-aws/sqs] => ^1.0
            [cache/integration-tests] => dev-master
            [composer/package-versions-deprecated] => ^1.8
            [doctrine/annotations] => ~1.0
            [doctrine/cache] => ~1.6
            [doctrine/collections] => ~1.0
            [doctrine/orm] => ~2.4,>=2.4.5
            [doctrine/reflection] => ~1.0
            [doctrine/doctrine-bundle] => ^2.0
            [guzzlehttp/promises] => ^1.3.1
            [masterminds/html5] => ^2.6
            [monolog/monolog] => ^1.25.1|^2
            [nyholm/psr7] => ^1.0
            [ocramius/proxy-manager] => ^2.1
            [paragonie/sodium_compat] => ^1.8
            [php-http/httplug] => ^1.0|^2.0
            [predis/predis] => ~1.1
            [psr/http-client] => ^1.0
            [psr/simple-cache] => ^1.0
            [egulias/email-validator] => ~1.2,>=1.2.8|~2.0
            [symfony/security-acl] => ~2.8|~3.0
            [phpdocumentor/reflection-docblock] => ^3.0|^4.0|^5.0
            [twig/cssinliner-extra] => ^2.12
            [twig/inky-extra] => ^2.12
            [twig/markdown-extra] => ^2.12
            [doctrine/data-fixtures] => ^1.1
            [symfony/phpunit-bridge] => ^5.2
            [pda/pheanstalk] => ^4.0
            [doctrine/dbal] => ^2.10|^3.0
            [amphp/amp] => ^2.5
            [amphp/http-client] => ^4.2.1
        )

    [conflict] => Array
        (
            [doctrine/dbal] => <2.10
            [masterminds/html5] => <2.6
            [phpdocumentor/reflection-docblock] => <3.2.2
            [phpdocumentor/type-resolver] => <0.3.0
            [ocramius/proxy-manager] => <2.1
            [phpunit/phpunit] => <5.4.3
        )

    [replace] => Array
        (
            [symfony/asset] => self.version
            [symfony/amazon-mailer] => self.version
            [symfony/browser-kit] => self.version
            [symfony/cache] => self.version
            [symfony/config] => self.version
            [symfony/console] => self.version
            [symfony/css-selector] => self.version
            [symfony/dependency-injection] => self.version
            [symfony/debug-bundle] => self.version
            [symfony/doctrine-bridge] => self.version
            [symfony/dom-crawler] => self.version
            [symfony/dotenv] => self.version
            [symfony/error-handler] => self.version
            [symfony/event-dispatcher] => self.version
            [symfony/expression-language] => self.version
            [symfony/filesystem] => self.version
            [symfony/finder] => self.version
            [symfony/form] => self.version
            [symfony/framework-bundle] => self.version
            [symfony/google-mailer] => self.version
            [symfony/http-client] => self.version
            [symfony/http-foundation] => self.version
            [symfony/http-kernel] => self.version
            [symfony/inflector] => self.version
            [symfony/intl] => self.version
            [symfony/ldap] => self.version
            [symfony/lock] => self.version
            [symfony/mailchimp-mailer] => self.version
            [symfony/mailer] => self.version
            [symfony/mailgun-mailer] => self.version
            [symfony/messenger] => self.version
            [symfony/mime] => self.version
            [symfony/monolog-bridge] => self.version
            [symfony/notifier] => self.version
            [symfony/options-resolver] => self.version
            [symfony/postmark-mailer] => self.version
            [symfony/process] => self.version
            [symfony/property-access] => self.version
            [symfony/property-info] => self.version
            [symfony/proxy-manager-bridge] => self.version
            [symfony/routing] => self.version
            [symfony/security-core] => self.version
            [symfony/security-csrf] => self.version
            [symfony/security-guard] => self.version
            [symfony/security-http] => self.version
            [symfony/security-bundle] => self.version
            [symfony/sendgrid-mailer] => self.version
            [symfony/serializer] => self.version
            [symfony/stopwatch] => self.version
            [symfony/string] => self.version
            [symfony/templating] => self.version
            [symfony/translation] => self.version
            [symfony/twig-bridge] => self.version
            [symfony/twig-bundle] => self.version
            [symfony/uid] => self.version
            [symfony/validator] => self.version
            [symfony/var-dumper] => self.version
            [symfony/var-exporter] => self.version
            [symfony/web-link] => self.version
            [symfony/web-profiler-bundle] => self.version
            [symfony/workflow] => self.version
            [symfony/yaml] => self.version
            [symfony/semaphore] => self.version
            [symfony/rate-limiter] => self.version
        )

    [uid] => 3964350
)
nevergone commented 3 years ago

Related (?) issue: https://github.com/composer/composer/issues/8047

zaporylie commented 3 years ago

Hi all, thanks for reporting this. Seems like related to https://github.com/symfony/symfony/commit/5f1c3a797247a6d54992384df00bb22741fc1c34. I'll investigate how symfony/flex deals with it which this repo is inspired by.

reloxo95 commented 3 years ago

Same issue with any composer require "drupal module"

works for me but Im not sure that it could be a solution. Maybe temporal fix.... hope to help!

sanket-jain10 commented 3 years ago

@eiriksm Today I upgraded to drupal core 8.8.10 with other dependencies and it was working fine. But now I am getting this issue while doing composer update ..will that go away once this fix gets deployed?

FlorentTorregrosa commented 3 years ago

Hello,

I asked on Slack too: https://drupal.slack.com/archives/C1BMUQ9U6/p1601974346171200

zaporylie commented 3 years ago

Created and tested #22 which I'll greatly appreciate some else could have a look at.

blastedmau5 commented 3 years ago

It's works for me ! thx

hkirsman commented 3 years ago

Release soon!? :)

zaporylie commented 3 years ago

Very soon :wink: FYI the steps to upgrade from <1.1.2 to 1.1.2 will involve removing all dev dependencies or manually deleting vendor/zaporylie/composer-drupal-optimizations directory for the time when composer update zaporylie/composer-drupal-optimizations command is running.

rm -rf vendor/zaporylie/composer-drupal-optimizations
composer update zaporylie/composer-drupal-optimizations

or

composer install --no-dev
composer update zaporylie/composer-drupal-optimizations

or

composer update zaporylie/composer-drupal-optimizations --no-plugins
composer update --lock
FlorentTorregrosa commented 3 years ago

Thanks! :)

bradtreloar commented 3 years ago

Thanks, I used the first method and it worked perfectly. I was able to run composer update afterwards without any problems.

AntoniyaM commented 3 years ago

awesome! thanks <3

hughworm commented 3 years ago

Awesome. Thanks for prompt fix!

Vinay15 commented 3 years ago

Thanks! This helps.

reloxo95 commented 3 years ago

Tested! Works perfect. Thanks :)

NicolasAOWS commented 3 years ago

Thanks, it's works for Drupal

ChristopherMatthews commented 3 years ago

I ran into an out of memory error so I had to add COMPOSER_MEMORY_LIMIT=-1 to the 2nd command. Thanks for the quick fix on this!

rm -rf vendor/zaporylie/composer-drupal-optimizations COMPOSER_MEMORY_LIMIT=-1 composer update zaporylie/composer-drupal-optimizations

brace110 commented 3 years ago
rm -rf vendor/zaporylie/composer-drupal-optimizations
php -d memory_limit=-1 "$(which composer)" update zaporylie/composer-drupal-optimizations

This solution fixed the problem, but this is breaking every site we have. Why is 1.1 giving fatal errors and can you update the release notes to reflect the problem.

markconroy commented 3 years ago

Thanks for this fix folks, much appreciated.

joz-d7 commented 3 years ago

Thank you @zaporylie

marcomaranao commented 3 years ago

Thanks @zaporylie !

charlottedestrait commented 3 years ago

Thank you :)

jcandan commented 3 years ago

Anybody else notice that the vendor/zaporylie is empty after this?

rm -rf vendor/zaporylie/composer-drupal-optimizations
composer update zaporylie/composer-drupal-optimizations
ls -la vendor/zaporylie
thelbert commented 3 years ago

@jcandan I had to run rm -rf vendor/zaporylie/composer-drupal-optimizations COMPOSER_MEMORY_LIMIT=-1 composer update zaporylie/composer-drupal-optimizations --no-plugins

bfuzze commented 3 years ago

The above approaches did not work for me (just hangs on update). My current project is in early development, so it could be unrelated to this issue. I had to remove the entire vendor directory and then composer update.

alfattal commented 3 years ago

Thank you @zaporylie. I also ran into PHP Fatal error, so adding COMPOSER_MEMORY_LIMIT=-1 to the second command fix that for me. Thanks, @ChristopherMatthews, for pointing that out.