Giter VIP home page Giter VIP logo

cmscomposerinstallers's Introduction

TYPO3 CMS

TYPO3 is an open source PHP based web content management system released under the GNU GPL. TYPO3 is copyright © 1999-2024 by Kasper Skårhøj.

This document provides a basic introduction to TYPO3.

Getting Started

TYPO3 requires a web server with PHP and a database. The backend is accessed via a supported browser.

Please see the Installation Guide in order to set up a basic TYPO3 installation on your web server.

What is TYPO3?

TYPO3 is a free and open source Content Management Framework. It is released under the GNU General Public License. It can run on several web servers, such as Apache, nginx or IIS, on top of many operating systems, among them Linux, Microsoft Windows, FreeBSD or macOS.

TYPO3 was initially authored by Kasper Skårhøj and is now further developed by a community of contributors and the TYPO3 Core Development Team.

To get more info about the GPL license, visit https://opensource.org/licenses/gpl-license

What is a Content Management Framework?

A Content Management Framework is more than just a content management system, due to the separation of the streamlined core and optional plugins (extensions). TYPO3 has an open API that allows you to extend the frontend (website) and/or backend (administration) functionality.

The concept of extensions makes TYPO3 capable of being developed and used in almost any way you can imagine, either by using any of the many extensions which are available for download, or by writing your own.

TYPO3 System requirements

TYPO3 is based upon PHP and uses a database management system like MySQL.

For more specific information regarding requirements see the file INSTALL.md in this folder.

TYPO3 resources

Here is an overview of the most important TYPO3 resources to help you get started:

Get more information

  • https://typo3.org/ is the main project website. It provides up-to-date official news, information about events and the TYPO3 community.

  • https://docs.typo3.org/: TYPO3 is one of the most thoroughly documented OpenSource products around, with manuals covering basic tutorials, TypoScript, administration, development, core structure, etc. You should make the time to locate the various documents, and read those that apply to the work you want to do.

  • https://get.typo3.org/ is the platform where you can download TYPO3 and find all release notes and change logs of TYPO3 releases.

  • https://extensions.typo3.org/ is the platform where you can search for and download TYPO3 extensions.

Chat with us

The TYPO3 community is using a tool called Slack to openly communicate with each other and with the public. Several TYPO3 teams use Slack as a way to communicate internally and most channels are a welcome place for you to join and get yourself involved.

Exchange information, ask questions, get help

Slack is nice for short discussions, but when asking questions, most answers are lost in the noise after a few minutes.

StackOverflow

To let everyone profit from an answer, we recommend to ask questions on StackOverflow. If you like, you can then post a link into the corresponding Slack channel to raise attention. And please, do not forget to tag your questions correctly with typo3 (and possibly other tags like typo3-9.5.x, Fluid or Extbase).

Official meet the TYPO3 Community overview:

Visit https://typo3.org/community/meet/

Contributing

If you want to contribute to the TYPO3 source code, take a look at our Contributors Walkthrough and Review System:

Please use the TYPO3 Slack chat, if you need help in setting up your contribution environment. The community is very helpful and get you up and running! (Please post your questions in Slack Channel #typo3-cms-coredev regarding contribution support)

The repository at GitHub is a synchronized mirror of the primary TYPO3 core git repository:

If you want to file a bug report, take a look at:

Security

If you learn about a potential security issue in the TYPO3 core or in an extension, please always contact the TYPO3 Security Team via [email protected]. Please always include the version number where you've discovered the issue. If we can confirm a problem in a third-party extension, we will inform the author immediately.

If you discover a security problem in your own extension, please inform the TYPO3 Security Team as well. They can help you to fix it, and they may want to issue an advisory once it is fixed.

For more details see TYPO3 Security Team.

Final notes

TYPO3 is said to be one of the most sophisticated PHP / Internet related applications available, and the more you play with it, the more you will agree.

Due to the advanced level of the code and functionality, a degree of study, time and perseverance is required to fully understand it, and get the best from it. You should keep trying, as we say it's definitely worth it. TYPO3 is the Enterprise Content Management System "for all".

The GPL license allows for developments that are based upon TYPO3 to also be freely available under the GPL. Please remember this, because TYPO3 is about "Inspiring People To Share". If you are making money with TYPO3 you can donate or become a member of the TYPO3 Association.

By becoming a supporting member, individuals and organisations mainly fund core development of TYPO3. The decision about what the funds are used for, is made by all members of the Association and the TYPO3 Association Board. The decisions will be made transparent to the community and especially the supporting members. Your funds will also serve for other purposes as laid out in the bylaws.

Copyleft

This document is a part of the TYPO3 project.

cmscomposerinstallers's People

Contributors

benjaminkott avatar bmack avatar bnf avatar brotkrueml avatar copitz avatar ervaude avatar gilbertsoft avatar helhum avatar henningcash avatar ichhabrecht avatar jonaseberle avatar lolli42 avatar maddy2101 avatar mbrodala avatar sascha-egerer avatar seldaek avatar sypets avatar timofloettmann avatar tmaroschik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cmscomposerinstallers's Issues

Hardcoded extension key in ext_emconf.php

If the extension name is hardcoded in the ext_emconf.php file, the getEmConfMetaData method throws an Undefined index exception. Because the access via $EM_CONF[$_EXTKEY] won't work.

hardcoded extkey

$EM_CONF['my_ext'] = array(
   ...
);

extkey via variable

$EM_CONF[$_EXTKEY] = array(
   ...
);

The Problem is: $_EXTKEY = basename($path); this doesn't work with hardcoded extkeys.

Version 1.4 breaks semantic versioning

From version 1.4.0 onwards, the package requires PHP >=7.0.0 < 7.2, but package version up to 1.3 did not have any requirement for the PHP version.

Is it possible to fix this by rebranding/republishing the package version from 1.4.0 upwars as 2.0.x?

This is a problem since TPYO3 7.6 requires typo3/cms-composer-installers ^1.2.8, and is still compatible with PHP 5.

Do not fail if typo3/ or index.php symlink already exists

If one does a rm -rf vendor && composer install errors like this will occur:

[InvalidArgumentException]
The symlink target ".../web/index.php" already exists.

Or:

[InvalidArgumentException]
The symlink target ".../web/typo3" already exists.

This could be avoided if e.g. readlink() was used to verify existing symlinks already point to the expected target.

Currently one has to do rm -rf vendor web/index.php web/typo3 && composer install instead.

composer install does not work when replace section does not contain a package without a slash

The bug happens when an extension adds it's typo3-ter/ package to replace section in composer.json, without adding "staticfilecache": "self.version",:

            "replace": {
                "typo3-ter/staticfilecache": "self.version"
            },

Then composer install fails with:

PHP Fatal error:  Uncaught TypeError: strpos() expects parameter 1 to be string, integer given in //vendor/typo3/cms-composer-installers/src/Plugin/Util/ExtensionKeyResolver.php:38
Stack trace:
#0 //vendor/typo3/cms-composer-installers/src/Plugin/Util/ExtensionKeyResolver.php(38): strpos(0, '/')
#1 //vendor/typo3/cms-composer-installers/src/Installer/ExtensionInstaller.php(196): TYPO3\CMS\Composer\Plugin\Util\ExtensionKeyResolver::resolve(Object(Composer\Package\AliasPackage))
#2 //vendor/typo3/cms-composer-installers/src/Installer/ExtensionInstaller.php(211): TYPO3\CMS\Composer\Installer\ExtensionInstaller->getInstallPath(Object(Composer\Package\AliasPackage))
#3 phar:///usr/local/Cellar/composer/1.8.4/bin/composer/src/Composer/Installer/InstallationManager.php(147): TYPO3\CMS\Composer\Installer\ExtensionInstaller->ensureBinariesPresence(Object(Composer\Package\AliasPackage))
#4 phar:///usr/local/Cellar/comp in //vendor/typo3/cms-composer-installers/src/Plugin/Util/ExtensionKeyResolver.php on line 38

Adopt original TYPO3 dependency behavior

There are some extensions (e.g. fluidbootstraptheme and some FluidTYPO3 extensions) that have different dependencies set in ext_emconf.php and the data-string delivered from TER. In most cases the TER dependecies are outdated. (I have never uploaded any extension to TER, so I have no clue where TER takes the dependencies from)

Original ext_emconf.php vs. data from TER (note the empty depends):

array (
  'title' => 'FBT: Bootstrap based Pages and Content',
  'description' => 'A collection of Twitter Bootstrap oriented Fluid Content Elements and Pages written for EXT:fluidcontent and EXT:fluidpages using ViewHelpers from EXT:vhs',
  'category' => 'misc',
  'shy' => false,
  'version' => '1.1.0',
  'dependencies' => '',
  'conflicts' => '',
  'priority' => '',
  'loadOrder' => NULL,
  'module' => '',
  'state' => 'stable',
  'uploadfolder' => false,
  'createDirs' => '',
  'modify_tables' => '',
  'clearcacheonload' => true,
  'lockType' => '',
  'author' => 'Claus Due, Harry Glatz, Boris Schauer ',
  'author_email' => '[email protected], [email protected], [email protected]',
  'author_company' => 'NamelessCoder, analog multimedia, bschauer',
  'CGLcompliance' => NULL,
  'CGLcompliance_note' => NULL,
  'constraints' => 
  array (
    'depends' => 
    array (
    ),
    'conflicts' => 
    array (
    ),
    'suggests' => 
    array (
    ),
  ),
  '_md5_values_when_last_written' => '[...]',
);

TYPO3's extensionmanager prefers the dependencies that are set in ext_emconf.php. Imo cms-composer-installers should do this, too - so it could simply merge the existing ext_emconf.php and TER-data.

Can't parse json with http / https proxy

Hi!

I'm using composer with an http / https proxy (based on apache 2.2)

composer --verbose diag says:

Checking platform settings: OK
Checking git settings: OK
Checking http connectivity: OK
Checking HTTP proxy: OK
Checking HTTP proxy support for request_fulluri: OK
Checking HTTPS proxy support for request_fulluri: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking composer version: OK

but if I install TYPO3 over:

composer create-project typo3/cms-base-distribution CmsBaseDistribution

I get:

[Seld\JsonLint\ParsingException]                                        
"https://get.typo3.org/json" does not contain valid JSON                
Parse error on line 1:                                                  
<!DOCTYPE html><htm                                                     
 ^                                                                       
Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

which comes from:
https://github.com/TYPO3/CmsComposerInstallers/blob/master/Classes/TYPO3/CMS/Composer/Installer/CoreInstaller/GetTypo3OrgService.php

It seams, that it is a SSL related issue. With my workaround, everything is OK:

https://github.com/khaefeli/CmsComposerInstallers/commit/b53da55ac7d34bdafaac729914c302a05ac89c6c

composer.json (fail)

{
"repositories": [
    {"type": "vcs", "url": "https://github.com/TYPO3/CmsComposerInstallers" }
],
"require": {
"typo3/cms-composer-installers": "1.1.*@dev",
"typo3/cms": "~6.2"
}
}

composer.json (works)

{
"repositories": [
    {"type": "vcs", "url": "https://github.com/khaefeli/CmsComposerInstallers" }
],
"require": {
"typo3/cms-composer-installers": "1.1.*@dev",
"typo3/cms": "~6.2"
}
}

maybe it's related to the OpenSSL / TLS version from get.typo3.org.
(only TLS 1.0 is supported because of the old openssl installation)

maybe it's related to the following issue: composer/composer#3204

Regards,
Kevin

Option to skip symlinks and directory structure

I'm hoping to switch to a fully composer based typo3 installation soon. Meaning I'd add a composer.json to my repository and include some of my dev-dependencies as well as typo3/cms and all the external extensions via composer.

Whenever I run composer install locally however, the installer creates symlinks and directories that mess with the directory structure within my repository. I don't like that very much. It's good for production, but not for local development.
The best case for me would be that everything gets installed under vendor/ in development mode (= composer install without --no-dev) and symlinks etc. are only created in production (when --no-dev is provided).

Personally I'd like to have a config-setting that enables this and then uses the --no-dev flag to determine the desired behaviour.

Any thoughts? Is there already a way to do something like this?

Custom installation paths

Currently this plugin requires/enforces the following structure:

  • <path-to-document-root>
    • <document-root>
      • composer.json
      • typo3_src
      • typo3 -> typo3_src/typo3
      • index.php -> typo3_src/index.php

The following structure would be quite useful instead:

  • <path-to-document-root>
    • composer.json
    • typo3_src
    • <document-root>
      • typo3 -> ../typo3_src/typo3
      • index.php -> ../typo3_src/index.php

This keeps the publicly exposed data to a minimum but requires a different directory/symlink setup which could be achieved if the installation paths where configurable similar to composer/installers.

Please consider allowing custom installation paths.

ErrorException "Undefined index: conflicts"

Exception stack trace while installing powermail:

- Installing typo3-ter/powermail (2.25.0)
    Downloading https://typo3.org/extensions/repository/download/powermail/2.25.0/t3x/
    Downloading: 100%
    Writing ~/.composer/cache/files/typo3-ter/powermail/e0bca4beb5a127bf561158ceadb329a6c7225ee8.t3x into cache from typo3conf/ext/powermail/3d5ec0e70bf2293612173fdfe7fdac26
    Extracting archive


  [ErrorException]
  Undefined index: conflicts


Exception trace:
 () at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Downloader/T3xDownloader.php:310
 Composer\Util\ErrorHandler::handle() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Downloader/T3xDownloader.php:310
 TYPO3\CMS\Composer\Installer\Downloader\T3xDownloader->fixEmConf() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Downloader/T3xDownloader.php:251
 TYPO3\CMS\Composer\Installer\Downloader\T3xDownloader->constructEmConf() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Downloader/T3xDownloader.php:236
 TYPO3\CMS\Composer\Installer\Downloader\T3xDownloader->writeEmConf() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Downloader/T3xDownloader.php:77
 TYPO3\CMS\Composer\Installer\Downloader\T3xDownloader->extract() at phar:///opt/composer/composer.phar/src/Composer/Downloader/ArchiveDownloader.php:43
 Composer\Downloader\ArchiveDownloader->download() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Downloader/T3xDownloader.php:50
 TYPO3\CMS\Composer\Installer\Downloader\T3xDownloader->download() at phar:///opt/composer/composer.phar/src/Composer/Downloader/DownloadManager.php:213
 Composer\Downloader\DownloadManager->download() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/ExtensionInstaller.php:175
 TYPO3\CMS\Composer\Installer\ExtensionInstaller->installCode() at Packages/Libraries/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/ExtensionInstaller.php:104
 TYPO3\CMS\Composer\Installer\ExtensionInstaller->install() at phar:///opt/composer/composer.phar/src/Composer/Installer/InstallationManager.php:152
 Composer\Installer\InstallationManager->install() at phar:///opt/composer/composer.phar/src/Composer/Installer/InstallationManager.php:139
 Composer\Installer\InstallationManager->execute() at phar:///opt/composer/composer.phar/src/Composer/Installer.php:569
 Composer\Installer->doInstall() at phar:///opt/composer/composer.phar/src/Composer/Installer.php:228
 Composer\Installer->run() at phar:///opt/composer/composer.phar/src/Composer/Command/UpdateCommand.php:173
 Composer\Command\UpdateCommand->execute() at phar:///opt/composer/composer.phar/vendor/symfony/console/Command/Command.php:259
 Symfony\Component\Console\Command\Command->run() at phar:///opt/composer/composer.phar/vendor/symfony/console/Application.php:844
 Symfony\Component\Console\Application->doRunCommand() at phar:///opt/composer/composer.phar/vendor/symfony/console/Application.php:192
 Symfony\Component\Console\Application->doRun() at phar:///opt/composer/composer.phar/src/Composer/Console/Application.php:166
 Composer\Console\Application->doRun() at phar:///opt/composer/composer.phar/vendor/symfony/console/Application.php:123
 Symfony\Component\Console\Application->run() at phar:///opt/composer/composer.phar/src/Composer/Console/Application.php:99
 Composer\Console\Application->run() at phar:///opt/composer/composer.phar/bin/composer:43

Improve usability: fail gracefully on existing symlinks

Hi Helmut,

the composer installer fails with fatal in case web/index.php or web/typo3 already exist.
Do you see a reason for the fatal in case the symlinks are set up correctly?

I think about adding a second check to Filsystem->symlink checks beside file_exists that compare the current symlink target to the intended symlink target.

Good or nah?

    public function symlink($source, $target, $copyOnFailure = true, $makeRelative = true)
    {
        if (!file_exists($source)) {
            throw new \InvalidArgumentException('The symlink source "' . $source . '" is not available.');
        }
        if (file_exists($target)) {
            throw new \InvalidArgumentException('The symlink target "' . $target . '" already exists.');

CmsComposerInstallers installation fails

Hi,
I'm trying to install Typo3 via composer and using this composer.json (it is a txt file because github doesn't allow to upload json files)
The problem arises with installing typo3/cms-composer-installers v1.5.0 giving following output:

` - Installing typo3/cms-composer-installers (v1.5.0): Downloading https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/38306da58d6b8d770b1a1308c529913b3821c0f5
Downloading (connecting...)
Following redirect (2) https://codeload.github.com/TYPO3/CmsComposerInstallers/legacy.zip/38306da58d6b8d770b1a1308c529913b3821c0f5
Downloading https://codeload.github.com/TYPO3/CmsComposerInstallers/legacy.zip/38306da58d6b8d770b1a1308c529913b3821c0f5
Downloading (100%)Writing /root/.composer/cache/files/typo3/cms-composer-installers/ce55b1d9b3043a78543aa1c7940c4fcdfbdf67b5.zip into cache from /var/www/html/vendor/typo3/cms-composer-installers/cd973b4e0f2e10474cf033048a8551be

Extracting archiveExecuting command (CWD): unzip -qq '/var/www/html/vendor/typo3/cms-composer-installers/cd973b4e0f2e10474cf033048a8551be' -d '/var/www/html/vendor/composer/ca053087'
Plugin installation failed, rolling back

  • Removing typo3/cms-composer-installers (v1.5.0)

[RuntimeException]
Could not delete /var/www/html/vendor/typo3/cms-composer-installers/res/php:`

If you need the whole console output: consoleOutput.txt
The whole composer.lock composer_lock.txt
Hopefully I provided enough information and thank you for any help.

Could you explain a little what this does?

Hi,

Coming over from Drupal, we are currently working in integrating composer more with the core system. The current integration we have is rather ... lacking.

It seems typo3 has a pretty nice idea on how to integrate it with 'legacy' modules and it seems this project is key to that.

Would it be possible to explain a little the strategy that is used here and what is overwritten how from the core composer library?

Maybe we can collaborate somewhat as it seems we try to solve the same problem (support legacy extensions / modules / libraries in a composer enabled world.)

Thanks,

Fabian

confused - subtree - symlinks yes/no - sitepackage

I am confused and see the need for some clear best practice:

starting point are these links:
https://usetypo3.com/typo3-and-composer.html
https://usetypo3.com/typo3-subtree-split-and-composer.html
#75

But what is best pracitce?

a. do I start with a simple composer.json

{
    "require": {
        "typo3/minimal": "^9.5",

       **add more core stuff - but what ??? needs some real digging**

        "heise/shariff": "^8.0",
        "gringer/news": "^99.0"

        **add all my extensions I need**


    }
}

b. load up manually into typo3conf/ext/ my sitepackage with a composer.json that holds the autoload information but how is this then ever reaching composer if I upload it manually?
Does autoload have to go into my start composer.json?

"autoload": {
       "psr-4": {
           "Zazuberlin\\Zazupackage\\": "Classes/"
       }
   }

The discussion stucki - helhum
#75

now what? symlinks yes or no - just have all in public?

So do I understand it right, that I travel from one installation to the next with my basic TYPO3 composer.json and my manually to add sitepackage?

I think this needs some clear words since most of the information what is out there is outdated.

TH

__DIR__ differences on Windows / Mac at autoload.php

Hi,
I have a problem with the latest version of TYPO3 / Composer on Windows (xampp).

Warning: require_once(C:\xampp\htdocs\typo37\vendor\typo3\cms\vendor/composer/autoload_real.php): failed to open stream: No such file or directory in C:\xampp\htdocs\typo37\vendor\typo3\cms\vendor\autoload.php on line 5

/vendor/typo3/cms/vendor/autoload.php is a symlink to vendor/autoload.php

With Mac OSX there is no such error.
I figured out that the "DIR" constant is different on Windows and Unix.

In my example with the autoload.php file:
Mac: Path to the resolved file (vendor/)
Windows: Path to the symlinked file (vendor/typo3/cms/vendor/)

With this differences the require_once in autoload.php (Line 5) failes on Windows.

Is there any solution for this? Thanks.

PHP Fatal error: Uncaught TypeError: Argument 1 passed to...

Hey there,

with version 1.4.3 i get the following PHP errors:

PHP Fatal error: Uncaught TypeError: Argument 1 passed to TYPO3\CMS\Composer\Plugin\PluginImplementation::__construct() must be an instance of Composer\Script\Event, instance of Composer\Installer\PackageEvent given, called in <PROJECT_PATH>/vendor/typo3/cms-composer-installers/src/Installer/Plugin.php on line 152 and defined in <PROJECT_PATH>/vendor/typo3/cms-composer-installers/src/Plugin/PluginImplementation.php:57 ...

Does anyone have the same errors?

Composer version: 1.5.2.

PS: I shorted the paths with <PROJECT_PATH>

Add app on root package

Is the use case of adding an app (Classes, Configuration, Resources, ...) in the root package a supported use case?

In practice we often have one "main" extension per project (in classic mode in would reside in typo3conf/ext/xxyyy and everything is stitched together via git submodules).

  • splitting a project across git submodules has proven to be error prone

Now composer seems to come to the rescue. However as soon as we start to maintain two separate packages for the distribution and for the application itself(By application I refer to a classic typo3 extension) we again get into troubles because we need to update the external dependency all the time.

Do you get my point?

I think I could add Classes on the root-package (and announce them to the Classloader), however I'd also like to make use of the feature to split out the (public) web folder. How could this work out when adding the application on the root-package?

Do you have any suggestion, best practice on the setup of a project or vision/roadmap for improvements?

Thx for any feedback

Replacing extension name doesn't work

We've added a composer.json to our Aimeos TYPO3 extension (https://github.com/aimeos/aimeos-typo3/blob/master/composer.json) and added a replace section to rename the extension from aimeos-typo3 to aimeos:

    "replace": {
        "aimeos": "self.version"
    },

Unfortunately, this doesn't work when executing a composer update. The extension is always stored in typo3conf/ext/aimeos-typo3/ instead of typo3conf/ext/aimeos/. What did we do wrong?

The used root composer.json is:

{
    "repositories": [
        { "type": "composer", "url": "https://composer.typo3.org/" }
    ],
    "name": "vendor/example",
    "description" : "foo",
    "minimum-stability": "dev",
    "prefer-stable": true,
    "require": {
        "typo3/cms": "7.6.9",
        "aimeos/aimeos-typo3": "dev-master"
    },
    "extra": {
        "typo3/cms": {
            "cms-package-dir": "{$vendor-dir}/typo3/cms",
            "web-dir": "htdocs"
        }
    },
    "scripts": {
        "post-install-cmd": [
            "Aimeos\\Aimeos\\Custom\\Composer::install"
        ],
        "post-update-cmd": [
            "Aimeos\\Aimeos\\Custom\\Composer::install"
        ]
    }
}

Integration with Extensionmanager when requiring extension ?

AFAIK there is no integration between this project and TYPO3\CMS\Extensionmanager. Meaning that after a composer require typo3-ter/myextension, the extension remains inactive. And we have to go through TYPO3 backend to activate it (triggering database update if any).

Have you considered the possibility to automatically activate a requireed extension ? That may not be trivial (eg: if database is inaccessible yet), but that could simplify the workflow a lot.

Also an extension that would be composer updateed should also go through TYPO3\CMS\Extensionmanager to ensure that all signal/slots are dispatched as if it was updated from backend. This is actually the main reason why I see this feature as interesting. It would allow to update extension and let the extension itself update its data (via signals) whenever needed. That would completely automate the extension life-cycle. Removing the pain of going through the backend after each extension update.

Have you ever considered this ? Would it be possible in the foreseeable future ?

1.4.1 upgrade with error message

Hi dear commiters of CmsComposerInstallers,

when upgrading your library on my installation on MacOS, I got the following error message :

- Updating typo3/cms-composer-installers (1.3.1 => 1.4.1): Downloading (100%)
Writing lock file
Generating autoload files


 [Symfony\Component\Debug\Exception\FatalThrowableError]
 Class 'TYPO3\CMS\Composer\Plugin\Core\AutoloadConnector' not found

I can provide more infos if required !

Best regards,

Antoine

TYPO3 is no longer installed in vendor-dir

According to 2d078ab, typo3/cms should always be installed in the vendor directory.

I just tried installing the latest master, but it installs TYPO3 into {$web-dir}/typo3/. In older versions, a symlink was created instead when I specified cms-package-dir.
According to the message in the commit above, this should now be the default. However it seems like this doesn't work as expected...

Here is my composer.json:

{
    "config": {
        "git-clone-depth": 100,
        "process-timeout": 900,
        "preferred-install": "dist",
        "optimize-autoloader": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "repositories": [
        { "type": "composer", "url": "https://composer.typo3.org/" }
    ],
    "require": {
        "typo3/minimal": "dev-master",
        "typo3/cms-composer-installers": "dev-master"
    },
    "extra": {
        "typo3/cms": {
            "web-dir": "web"
        }
    }
}

Problem with Robloach Component INstaller

If a TYPO3-Extension depends on a Robloach-Component (e.g. eonasdan bootstrap-datetime-picker, moment, ..) the extension will be installed on the wrong place (in Packages/Libraries instead of typo3conf/ext). Could the issue lay in your component installer?

Clean invalid ext_emconf.php constraints

Using composer require typo3-ter/svconnector 3.0.0 leads to some strange behavior when the ext_emconf.php is being written. To make it short - not the composer installer is causing this, but the EM_CONF section from the T3X file is corrupt already.

The written ext_emconf.php in the target directory contained something like the following (see the empty constraint), which caused an exception on installing the extension in TYPO3.

	'constraints' => 
	array (
		'depends' => 
		array (
			'typo3' => '7.6.0-7.99.99',
			'' => '',
		),

Trying to create symlink on Windows fails with RuntimeException

Hi, I'm using PhpStorm with Composer to manage TYPO3.

With version 1.2.2 of typo3/cms-composer-installers the installation process was copying index.php from typo3_src to web directory, which was ok in my case.

After last "composer update" typo3/cms-composer-installers became of version 1.2.4 and now it fails with:

[RuntimeException]                                                           
  Symlinking target "C:\Projects code\project\www\index.php" to source "..\typo3  
  _src\index.php" ("C:\Projects code\project/typo3_src\index.php")  failed.      

Looks like this pull-request is the reason: #24, because it explicitly disallows to make a copies of files on symlink failure, which is exactly the case in my situation.

Is there any workaround for this?

Status of this project

Hi there,

we are using composer more and more in our TYPO3 development/deployment process. There are some open pull requests in this repository that haven't been merged for a long time.
Is this this project dead? Do you need help? I'm asking since this is a dependency of the TYPO3.CMS project and a very essential addition to the T3 environment.

Thanks for your work so far - keep it up!

BinaryInstaller can not be found

Hi,

trying to instal this i get an Error that teh BinaryInstaller can not be found.

  - Installing typo3/cms-composer-installers (dev-master 70fa1e6)
    Cloning 70fa1e6a00903d1ecddd8aa0370e0f60e4957b1a
Executing command (CWD): git clone --no-checkout "git://github.com/TYPO3/CmsComposerInstallers.git" "D:\...\vendor\typo3\cms-composer-installers" && cd /D "D:\...\vendor\typo3\cms-composer-installers" && git
remote add composer "git://github.com/TYPO3/CmsComposerInstallers.git" && git fetch composer
Executing command (D:\...\vendor\typo3\cms-composer-installers): git remote set-url --push origin "git@g
ithub.com:TYPO3/CmsComposerInstallers.git"
Executing command (D:\...\vendor\typo3\cms-composer-installers): git branch -r
Executing command (D:\...\vendor\typo3\cms-composer-installers): git checkout "master" --
Executing command (D:\...\vendor\typo3\cms-composer-installers): git reset --hard "70fa1e6a00903d1ecddd8
aa0370e0f60e4957b1a"

Loading plugin TYPO3\CMS\Composer\Installer\Plugin
PHP Fatal error:  Class 'Composer\Installer\BinaryInstaller' not found in D:\...\vendor\typo3\cms-composer-installers\Classes\TYPO3\CMS\Composer\Installer\Plugin.php on line 54

Fatal error: Class 'Composer\Installer\BinaryInstaller' not found in D:\...\Cms\vendor\typo3\cms-composer-installers\Classes\TYPO3\CMS\Composer\Installer\Plugin.php on line 54

Any Ideas?

TYPO3 8 ELTS Installation fails with CMSComposerInstallers 1.5.9

What did I do?

  • Update TYPO3 ELTS to version 8.7.40, which updates the CMSComposerInstallers from 1.5.6 to 1.5.9
  • Deploy to build systems which clear the "vendor" directory and then run composer install --no-dev using the newly updated composer.lock

What did I expect

  • Composer installs all packages and all TYPO3 extensions trough the installer

What happened instead?

  • Composer install all packages, the installation of extension fails
PHP Fatal error:  Uncaught Error: Class 'TYPO3\CMS\Composer\Util\T3xDownloaderUtility' not found in /home/xxxxxx/vendor/typo3/cms-composer-installers/src/Installer/Downloader/T3xDownloader.php:51

Re-write extension to typo3conf/ext on composer update

I'm experiencing an issue where a flaky internet connection leads to a half-installed state.

  1. composer update
  2. package metadata is known, package directory is created in typo3conf/ext
  3. package download breaks. -> empty extension directoy is present in typo3conf/ext
  4. run composer update again, extension directory is still empty -> broken dependency state in the cms extension matrix (composer thinks all nice and dandy)

So in conclusion this makes me think whether we should discard all local modifications in packages like composer itself does a check for changed files and asks to keep or remove them. It would lead to more stable transactions.

Any thoughts on this? I know, reproducing the issue is rather complex, but it happens for example when you access a password protected resource as package source (f.e. git.t3o) and kill the process when it asks for the password.

Mandatory extension key error is shown way too often

It runs for any script including the predefined pre and post hooks.

Here an expample of runnin a linter (!):

composer run php-cs-fixer
TYPO3 Extension Package "apache-solr-for-typo3/solrfluidgrouping", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "clickstorm/go_maps_ext", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "friendsoftypo3/typo3db-legacy", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "goran/save_close_ce", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "gridelementsteam/gridelements", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "in2code/fetchurl", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/fake-fal", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/fapalise", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/mageconnect", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-template", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/sierrha", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/tools4net", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-downloadcenter", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-news", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-serialno", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-solr", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/webp", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sitegeist/sms-responsive-images", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sourcebroker/urlguard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sourcebroker/urlguard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/pagetree-resizable", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/seo-canonical-guard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/sluggi", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "yoast-seo-for-typo3/yoast_seo", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "apache-solr-for-typo3/solrfluidgrouping", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "clickstorm/go_maps_ext", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "friendsoftypo3/typo3db-legacy", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "goran/save_close_ce", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "gridelementsteam/gridelements", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "in2code/fetchurl", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/fake-fal", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/fapalise", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/mageconnect", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-template", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/sierrha", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/tools4net", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-downloadcenter", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-news", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-serialno", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-solr", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/webp", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sitegeist/sms-responsive-images", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sourcebroker/urlguard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/pagetree-resizable", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/seo-canonical-guard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/sluggi", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "yoast-seo-for-typo3/yoast_seo", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "apache-solr-for-typo3/solrfluidgrouping", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "clickstorm/go_maps_ext", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "friendsoftypo3/typo3db-legacy", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "goran/save_close_ce", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "gridelementsteam/gridelements", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "in2code/fetchurl", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/fake-fal", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/fapalise", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/mageconnect", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-template", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/sierrha", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/tools4net", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-downloadcenter", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-news", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-serialno", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/p2n-shrek-solr", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "plan2net/webp", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sitegeist/sms-responsive-images", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "sourcebroker/urlguard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/pagetree-resizable", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/seo-canonical-guard", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "wazum/sluggi", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
TYPO3 Extension Package "yoast-seo-for-typo3/yoast_seo", does not define extension key in composer.json.
Specifying the extension key will be mandatory in future versions of TYPO3 (see: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ComposerJson/Index.html#extra)
> ./vendor/bin/php-cs-fixer fix --dry-run -v --diff --config=php-cs-fixer.config.php
PHP CS Fixer 2.18.2 Remote Void by Fabien Potencier and Dariusz Ruminski
Runtime: PHP 7.4.15
Loaded config default from "php-cs-fixer.config.php".
Using cache file "/app/var/cache/php-cs-fixer.json".
................................................................................
Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-error

Checked all files in 3.082 seconds, 18.000 MB memory used

If I do composer install with all the hooks I get more than 2000 lines for that warning that I cannot get rid of other then bugging the extension authors. That's rather abusive.

Fatal error on upgrade 1.2.x to 1.3.x

Upgrading from 1.2.x to the latest 1.3.x fails with a fatal error:

You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing typo3/cms-composer-installers (1.2.7)
  - Installing typo3/cms-composer-installers (1.3.1)
    Loading from cache

Writing lock file
Generating autoload files
PHP Fatal error:  Class 'TYPO3\CMS\Composer\Plugin\Core\AutoloadConnector' not found in /.../vendor/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Plugin.php on line 85
PHP Stack trace:
PHP   1. {main}() /usr/local/bin/composer:0
PHP   2. require() /usr/local/bin/composer:25
PHP   3. Composer\Console\Application->run($input = *uninitialized*, $output = *uninitialized*) phar:///usr/local/bin/composer/bin/composer:43
PHP   4. Symfony\Component\Console\Application->run($input = NULL, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/src/Composer/Console/Application.php:103
PHP   5. Composer\Console\Application->doRun($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:123
PHP   6. Symfony\Component\Console\Application->doRun($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/src/Composer/Console/Application.php:228
PHP   7. Symfony\Component\Console\Application->doRunCommand($command = class Composer\Command\UpdateCommand { private ${Composer\Command\BaseCommand}:composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private ${Composer\Command\BaseCommand}:io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private ${Symfony\Component\Console\Command\Command}:application = class Composer\Console\Application { protected $composer = class Composer\Composer { ... }; protected $io = class Composer\IO\ConsoleIO { ... }; private $hasPluginCommands = TRUE; private ${Symfony\Component\Console\Application}:commands = array (...); private ${Symfony\Component\Console\Application}:wantHelps = FALSE; private ${Symfony\Component\Console\Application}:runningCommand = ...; private ${Symfony\Component\Console\Application}:name = 'Composer'; private ${Symfony\Component\Console\Application}:version = '894b53c115fef68e8684b196dc68632016eb5783'; private ${Symfony\Component\Console\Application}:catchExceptions = TRUE; private ${Symfony\Component\Console\Application}:autoExit = TRUE; private ${Symfony\Component\Console\Application}:definition = class Symfony\Component\Console\Input\InputDefinition { ... }; private ${Symfony\Component\Console\Application}:helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; private ${Symfony\Component\Console\Application}:dispatcher = NULL; private ${Symfony\Component\Console\Application}:terminalDimensions = NULL; private ${Symfony\Component\Console\Application}:defaultCommand = 'list' }; private ${Symfony\Component\Console\Command\Command}:name = 'update'; private ${Symfony\Component\Console\Command\Command}:processTitle = NULL; private ${Symfony\Component\Console\Command\Command}:aliases = array (); private ${Symfony\Component\Console\Command\Command}:definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; private ${Symfony\Component\Console\Command\Command}:help = 'The <info>update</info> command reads the composer.json file from the\ncurrent directory, processes it, and updates, removes or installs all the\ndependencies.\n\n<info>php composer.phar update</info>\n\nTo limit the update operation to a few packages, you can list the package(s)\nyou want to update as such:\n\n<info>php composer.phar update vendor/package1 foo/mypackage [...]</info>\n\nYou may also use an asterisk (*) pattern to limit the update operation to package(s)\nfrom a specific vendor:\n\n<info>php...'; private ${Symfony\Component\Console\Command\Command}:description = 'Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.'; private ${Symfony\Component\Console\Command\Command}:ignoreValidationErrors = FALSE; private ${Symfony\Component\Console\Command\Command}:applicationDefinitionMerged = TRUE; private ${Symfony\Component\Console\Command\Command}:applicationDefinitionMergedWithArgs = TRUE; private ${Symfony\Component\Console\Command\Command}:code = NULL; private ${Symfony\Component\Console\Command\Command}:synopsis = array ('short' => 'update [options] [--] [<packages>]...', 'long' => 'update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>]...'); private ${Symfony\Component\Console\Command\Command}:usages = array (); private ${Symfony\Component\Console\Command\Command}:helperSet = class Symfony\Component\Console\Helper\HelperSet { private $helpers = array (...); private $command = NULL } }, $input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:192
PHP   8. Symfony\Component\Console\Command\Command->run($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:844
PHP   9. Composer\Command\UpdateCommand->execute($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:259
PHP  10. Composer\Installer->run() phar:///usr/local/bin/composer/src/Composer/Command/UpdateCommand.php:174
PHP  11. Composer\Autoload\AutoloadGenerator->dump($config = class Composer\Config { private $config = array ('process-timeout' => 300, 'use-include-path' => FALSE, 'preferred-install' => 'auto', 'notify-on-install' => TRUE, 'github-protocols' => array (...), 'vendor-dir' => 'vendor', 'bin-dir' => 'bin', 'cache-dir' => '/home/vagrant/.composer/cache', 'data-dir' => '/home/vagrant/.composer', 'cache-files-dir' => '{$cache-dir}/files', 'cache-repo-dir' => '{$cache-dir}/repo', 'cache-vcs-dir' => '{$cache-dir}/vcs', 'cache-ttl' => 15552000, 'cache-files-ttl' => NULL, 'cache-files-maxsize' => '300MiB', 'bin-compat' => 'auto', 'discard-changes' => FALSE, 'autoloader-suffix' => NULL, 'sort-packages' => FALSE, 'optimize-autoloader' => FALSE, 'classmap-authoritative' => FALSE, 'prepend-autoloader' => TRUE, 'github-domains' => array (...), 'bitbucket-expose-hostname' => TRUE, 'disable-tls' => FALSE, 'secure-http' => TRUE, 'cafile' => NULL, 'capath' => NULL, 'github-expose-hostname' => TRUE, 'gitlab-domains' => array (...), 'store-auths' => 'prompt', 'platform' => array (...), 'archive-format' => 'tar', 'archive-dir' => '.', 'home' => '/home/vagrant/.composer', 'http-basic' => array (...), 'github-oauth' => array (...), 'gitlab-oauth' => array (...)); private $baseDir = '/...'; private $repositories = array ('typo3' => array (...), 'pagemachine' => array (...), 'packagist' => array (...)); private $configSource = class Composer\Config\JsonConfigSource { private $file = class Composer\Json\JsonFile { ... }; private $authConfig = FALSE }; private $authConfigSource = class Composer\Config\JsonConfigSource { private $file = class Composer\Json\JsonFile { ... }; private $authConfig = TRUE }; private $useEnvironment = TRUE; private $warnedHosts = array () }, $localRepo = class Composer\Repository\InstalledFilesystemRepository { private ${Composer\Repository\FilesystemRepository}:file = class Composer\Json\JsonFile { private $path = '/.../vendor/composer/installed.json'; private $rfs = NULL; private $io = class Composer\IO\ConsoleIO { ... } }; protected $packages = array (0 => class Composer\Package\CompletePackage { ... }, 1 => class Composer\Package\CompletePackage { ... }, 2 => class Composer\Package\CompletePackage { ... }, 3 => class Composer\Package\CompletePackage { ... }, 4 => class Composer\Package\CompletePackage { ... }, 5 => class Composer\Package\CompletePackage { ... }, 6 => class Composer\Package\CompletePackage { ... }, 7 => class Composer\Package\CompletePackage { ... }, 8 => class Composer\Package\CompletePackage { ... }, 9 => class Composer\Package\CompletePackage { ... }, 10 => class Composer\Package\CompletePackage { ... }, 11 => class Composer\Package\CompletePackage { ... }, 12 => class Composer\Package\CompletePackage { ... }, 13 => class Composer\Package\CompletePackage { ... }, 14 => class Composer\Package\CompletePackage { ... }, 15 => class Composer\Package\CompletePackage { ... }, 16 => class Composer\Package\CompletePackage { ... }, 17 => class Composer\Package\CompletePackage { ... }, 18 => class Composer\Package\CompletePackage { ... }, 19 => class Composer\Package\CompletePackage { ... }, 20 => class Composer\Package\CompletePackage { ... }, 21 => class Composer\Package\CompletePackage { ... }, 22 => class Composer\Package\CompletePackage { ... }, 23 => class Composer\Package\CompletePackage { ... }, 24 => class Composer\Package\CompletePackage { ... }, 25 => class Composer\Package\CompletePackage { ... }, 26 => class Composer\Package\CompletePackage { ... }, 27 => class Composer\Package\CompletePackage { ... }, 28 => class Composer\Package\CompletePackage { ... }, 29 => class Composer\Package\CompletePackage { ... }, 30 => class Composer\Package\CompletePackage { ... }, 31 => class Composer\Package\CompletePackage { ... }, 32 => class Composer\Package\CompletePackage { ... }, 33 => class Composer\Package\CompletePackage { ... }, 34 => class Composer\Package\CompletePackage { ... }, 35 => class Composer\Package\CompletePackage { ... }, 36 => class Composer\Package\CompletePackage { ... }, 37 => class Composer\Package\CompletePackage { ... }, 38 => class Composer\Package\CompletePackage { ... }, 39 => class Composer\Package\CompletePackage { ... }, 40 => class Composer\Package\CompletePackage { ... }, 41 => class Composer\Package\CompletePackage { ... }, 42 => class Composer\Package\CompletePackage { ... }, 43 => class Composer\Package\CompletePackage { ... }, 44 => class Composer\Package\CompletePackage { ... }, 45 => class Composer\Package\CompletePackage { ... }, 46 => class Composer\Package\CompletePackage { ... }, 47 => class Composer\Package\CompletePackage { ... }, 48 => class Composer\Package\CompletePackage { ... }, 49 => class Composer\Package\CompletePackage { ... }, 50 => class Composer\Package\CompletePackage { ... }, 51 => class Composer\Package\CompletePackage { ... }, 52 => class Composer\Package\CompletePackage { ... }, 53 => class Composer\Package\CompletePackage { ... }, 54 => class Composer\Package\CompletePackage { ... }, 55 => class Composer\Package\CompletePackage { ... }) }, $mainPackage = class Composer\Package\RootPackage { protected $minimumStability = 'stable'; protected $preferStable = FALSE; protected $stabilityFlags = array (); protected $references = array (); protected $aliases = array (); protected $repositories = array ('typo3' => array (...), 'pagemachine' => array (...), 'packagist' => array (...)); protected $license = array (0 => 'proprietary'); protected $keywords = NULL; protected $authors = NULL; protected $description = 'Haag Streit Distribution'; protected $homepage = NULL; protected $scripts = array (); protected $support = array (); protected $abandoned = FALSE; protected $type = 'library'; protected $targetDir = NULL; protected $installationSource = NULL; protected $sourceType = ''; protected $sourceUrl = ''; protected $sourceReference = 'a0c11fcf0201008ed4f01884a32ba9cd96743232'; protected $sourceMirrors = NULL; protected $distType = ''; protected $distUrl = ''; protected $distReference = 'a0c11fcf0201008ed4f01884a32ba9cd96743232'; protected $distSha1Checksum = NULL; protected $distMirrors = NULL; protected $version = '9999999-dev'; protected $prettyVersion = 'dev-master'; protected $releaseDate = NULL; protected $extra = array ('typo3/cms' => array (...)); protected $binaries = array (); protected $dev = TRUE; protected $stability = 'dev'; protected $notificationUrl = NULL; protected $requires = array ('php' => class Composer\Package\Link { ... }, 'typo3/cms' => class Composer\Package\Link { ... }, 'helhum/typo3-console' => class Composer\Package\Link { ... }, 'pagemachine/typo3-base' => class Composer\Package\Link { ... }, 'typo3-ter/vhs' => class Composer\Package\Link { ... }, 'typo3-ter/realurl' => class Composer\Package\Link { ... }, 'typo3-ter/news' => class Composer\Package\Link { ... }, 'typo3-ter/powermail' => class Composer\Package\Link { ... }, 'teaminmedias-pluswerk/ke_search' => class Composer\Package\Link { ... }, 'typo3-ter/gridelements' => class Composer\Package\Link { ... }, 'gordalina/cachetool' => class Composer\Package\Link { ... }, 'typo3-ter/dd-googlesitemap' => class Composer\Package\Link { ... }, 'typo3-ter/go-maps-ext' => class Composer\Package\Link { ... }, 'typo3-ter/media' => class Composer\Package\Link { ... }); protected $conflicts = array (); protected $provides = array (); protected $replaces = array (); protected $devRequires = array ('phpunit/phpunit' => class Composer\Package\Link { ... }, 'jakub-onderka/php-parallel-lint' => class Composer\Package\Link { ... }, 'jakub-onderka/php-console-highlighter' => class Composer\Package\Link { ... }); protected $suggests = array (); protected $autoload = array ('psr-4' => array (...), 'classmap' => array (...)); protected $devAutoload = array ('psr-4' => array (...)); protected $includePaths = array (0 => 'vendor/pear/http_request2/', 1 => 'vendor/pear/net_url2/'); protected $archiveExcludes = array (); public $id = -1; protected $name = 'pagemachine/haag-streit-distribution'; protected $prettyName = 'pagemachine/haag-streit-distribution'; protected $repository = NULL; protected $transportOptions = array () }, $installationManager = class Composer\Installer\InstallationManager { private $installers = array (0 => class TYPO3\CMS\Composer\Installer\ExtensionInstaller { ... }, 1 => class TYPO3\CMS\Composer\Installer\CoreInstaller { ... }, 2 => class Composer\Installer\MetapackageInstaller { ... }, 3 => class Composer\Installer\PluginInstaller { ... }, 4 => class Composer\Installer\PearInstaller { ... }, 5 => class Composer\Installer\LibraryInstaller { ... }); private $cache = array ('composer-plugin' => class Composer\Installer\PluginInstaller { ... }, 'library' => class Composer\Installer\LibraryInstaller { ... }, 'class' => class Composer\Installer\LibraryInstaller { ... }, 'typo3-cms-extension' => class TYPO3\CMS\Composer\Installer\ExtensionInstaller { ... }, 'typo3-cms-core' => class TYPO3\CMS\Composer\Installer\CoreInstaller { ... }); private $notifiablePackages = array () }, $targetDir = '/.../vendor/composer', $scanPsr0Packages = FALSE, $suffix = *uninitialized*) phar:///usr/local/bin/composer/src/Composer/Installer.php:291
PHP  12. Composer\EventDispatcher\EventDispatcher->dispatchScript($eventName = 'post-autoload-dump', $devMode = TRUE, $additionalArgs = array (), $flags = array ('optimize' => FALSE)) phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php:296
PHP  13. Composer\EventDispatcher\EventDispatcher->doDispatch($event = class Composer\Script\Event { private $composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private $io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private $devMode = TRUE; protected $name = 'post-autoload-dump'; protected $args = array (); protected $flags = array ('optimize' => FALSE); private ${Composer\EventDispatcher\Event}:propagationStopped = FALSE }) phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:95
PHP  14. call_user_func:{phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:170}(array (0 => class TYPO3\CMS\Composer\Installer\Plugin {  }, 1 => 'postAutoload'), class Composer\Script\Event { private $composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private $io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private $devMode = TRUE; protected $name = 'post-autoload-dump'; protected $args = array (); protected $flags = array ('optimize' => FALSE); private ${Composer\EventDispatcher\Event}:propagationStopped = FALSE }) phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:170
PHP  15. TYPO3\CMS\Composer\Installer\Plugin->postAutoload($event = class Composer\Script\Event { private $composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private $io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private $devMode = TRUE; protected $name = 'post-autoload-dump'; protected $args = array (); protected $flags = array ('optimize' => FALSE); private ${Composer\EventDispatcher\Event}:propagationStopped = FALSE }) phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:170

Fatal error: Class 'TYPO3\CMS\Composer\Plugin\Core\AutoloadConnector' not found in /.../vendor/typo3/cms-composer-installers/Classes/TYPO3/CMS/Composer/Installer/Plugin.php on line 85

Call Stack:
    0.0002     224888   1. {main}() /usr/local/bin/composer:0
    0.0066     434616   2. require('phar:///usr/local/bin/composer/bin/composer') /usr/local/bin/composer:25
    0.0397    4375888   3. Composer\Console\Application->run($input = ???, $output = ???) phar:///usr/local/bin/composer/bin/composer:43
    0.0431    4765568   4. Symfony\Component\Console\Application->run($input = NULL, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/src/Composer/Console/Application.php:103
    0.0442    4900320   5. Composer\Console\Application->doRun($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:123
    0.4707   11846368   6. Symfony\Component\Console\Application->doRun($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/src/Composer/Console/Application.php:228
    0.4708   11846864   7. Symfony\Component\Console\Application->doRunCommand($command = class Composer\Command\UpdateCommand { private ${Composer\Command\BaseCommand}:composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private ${Composer\Command\BaseCommand}:io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private ${Symfony\Component\Console\Command\Command}:application = class Composer\Console\Application { protected $composer = class Composer\Composer { ... }; protected $io = class Composer\IO\ConsoleIO { ... }; private $hasPluginCommands = TRUE; private ${Symfony\Component\Console\Application}:commands = array (...); private ${Symfony\Component\Console\Application}:wantHelps = FALSE; private ${Symfony\Component\Console\Application}:runningCommand = ...; private ${Symfony\Component\Console\Application}:name = 'Composer'; private ${Symfony\Component\Console\Application}:version = '894b53c115fef68e8684b196dc68632016eb5783'; private ${Symfony\Component\Console\Application}:catchExceptions = TRUE; private ${Symfony\Component\Console\Application}:autoExit = TRUE; private ${Symfony\Component\Console\Application}:definition = class Symfony\Component\Console\Input\InputDefinition { ... }; private ${Symfony\Component\Console\Application}:helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; private ${Symfony\Component\Console\Application}:dispatcher = NULL; private ${Symfony\Component\Console\Application}:terminalDimensions = NULL; private ${Symfony\Component\Console\Application}:defaultCommand = 'list' }; private ${Symfony\Component\Console\Command\Command}:name = 'update'; private ${Symfony\Component\Console\Command\Command}:processTitle = NULL; private ${Symfony\Component\Console\Command\Command}:aliases = array (); private ${Symfony\Component\Console\Command\Command}:definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; private ${Symfony\Component\Console\Command\Command}:help = 'The <info>update</info> command reads the composer.json file from the\ncurrent directory, processes it, and updates, removes or installs all the\ndependencies.\n\n<info>php composer.phar update</info>\n\nTo limit the update operation to a few packages, you can list the package(s)\nyou want to update as such:\n\n<info>php composer.phar update vendor/package1 foo/mypackage [...]</info>\n\nYou may also use an asterisk (*) pattern to limit the update operation to package(s)\nfrom a specific vendor:\n\n<info>php...'; private ${Symfony\Component\Console\Command\Command}:description = 'Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.'; private ${Symfony\Component\Console\Command\Command}:ignoreValidationErrors = FALSE; private ${Symfony\Component\Console\Command\Command}:applicationDefinitionMerged = TRUE; private ${Symfony\Component\Console\Command\Command}:applicationDefinitionMergedWithArgs = TRUE; private ${Symfony\Component\Console\Command\Command}:code = NULL; private ${Symfony\Component\Console\Command\Command}:synopsis = array ('short' => 'update [options] [--] [<packages>]...', 'long' => 'update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>]...'); private ${Symfony\Component\Console\Command\Command}:usages = array (); private ${Symfony\Component\Console\Command\Command}:helperSet = class Symfony\Component\Console\Helper\HelperSet { private $helpers = array (...); private $command = NULL } }, $input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:192
    0.4709   11847440   8. Symfony\Component\Console\Command\Command->run($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:844
    0.4719   11852584   9. Composer\Command\UpdateCommand->execute($input = class Symfony\Component\Console\Input\ArgvInput { private $tokens = array (0 => 'up', 1 => 'typo3/cms-composer-installers'); private $parsed = array (); protected $definition = class Symfony\Component\Console\Input\InputDefinition { private $arguments = array (...); private $requiredCount = 1; private $hasAnArrayArgument = TRUE; private $hasOptional = TRUE; private $options = array (...); private $shortcuts = array (...) }; protected $options = array (); protected $arguments = array ('command' => 'up', 'packages' => array (...)); protected $interactive = TRUE }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private $stderr = class Symfony\Component\Console\Output\StreamOutput { private $stream = resource(154) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}:stream = resource(153) of type (stream); private ${Symfony\Component\Console\Output\Output}:verbosity = 32; private ${Symfony\Component\Console\Output\Output}:formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private $decorated = FALSE; private $styles = array (...); private $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } } }) phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:259
    0.4746   12280040  10. Composer\Installer->run() phar:///usr/local/bin/composer/src/Composer/Command/UpdateCommand.php:174
   22.3411  287632608  11. Composer\Autoload\AutoloadGenerator->dump($config = class Composer\Config { private $config = array ('process-timeout' => 300, 'use-include-path' => FALSE, 'preferred-install' => 'auto', 'notify-on-install' => TRUE, 'github-protocols' => array (...), 'vendor-dir' => 'vendor', 'bin-dir' => 'bin', 'cache-dir' => '/home/vagrant/.composer/cache', 'data-dir' => '/home/vagrant/.composer', 'cache-files-dir' => '{$cache-dir}/files', 'cache-repo-dir' => '{$cache-dir}/repo', 'cache-vcs-dir' => '{$cache-dir}/vcs', 'cache-ttl' => 15552000, 'cache-files-ttl' => NULL, 'cache-files-maxsize' => '300MiB', 'bin-compat' => 'auto', 'discard-changes' => FALSE, 'autoloader-suffix' => NULL, 'sort-packages' => FALSE, 'optimize-autoloader' => FALSE, 'classmap-authoritative' => FALSE, 'prepend-autoloader' => TRUE, 'github-domains' => array (...), 'bitbucket-expose-hostname' => TRUE, 'disable-tls' => FALSE, 'secure-http' => TRUE, 'cafile' => NULL, 'capath' => NULL, 'github-expose-hostname' => TRUE, 'gitlab-domains' => array (...), 'store-auths' => 'prompt', 'platform' => array (...), 'archive-format' => 'tar', 'archive-dir' => '.', 'home' => '/home/vagrant/.composer', 'http-basic' => array (...), 'github-oauth' => array (...), 'gitlab-oauth' => array (...)); private $baseDir = '/...'; private $repositories = array ('typo3' => array (...), 'pagemachine' => array (...), 'packagist' => array (...)); private $configSource = class Composer\Config\JsonConfigSource { private $file = class Composer\Json\JsonFile { ... }; private $authConfig = FALSE }; private $authConfigSource = class Composer\Config\JsonConfigSource { private $file = class Composer\Json\JsonFile { ... }; private $authConfig = TRUE }; private $useEnvironment = TRUE; private $warnedHosts = array () }, $localRepo = class Composer\Repository\InstalledFilesystemRepository { private ${Composer\Repository\FilesystemRepository}:file = class Composer\Json\JsonFile { private $path = '/.../vendor/composer/installed.json'; private $rfs = NULL; private $io = class Composer\IO\ConsoleIO { ... } }; protected $packages = array (0 => class Composer\Package\CompletePackage { ... }, 1 => class Composer\Package\CompletePackage { ... }, 2 => class Composer\Package\CompletePackage { ... }, 3 => class Composer\Package\CompletePackage { ... }, 4 => class Composer\Package\CompletePackage { ... }, 5 => class Composer\Package\CompletePackage { ... }, 6 => class Composer\Package\CompletePackage { ... }, 7 => class Composer\Package\CompletePackage { ... }, 8 => class Composer\Package\CompletePackage { ... }, 9 => class Composer\Package\CompletePackage { ... }, 10 => class Composer\Package\CompletePackage { ... }, 11 => class Composer\Package\CompletePackage { ... }, 12 => class Composer\Package\CompletePackage { ... }, 13 => class Composer\Package\CompletePackage { ... }, 14 => class Composer\Package\CompletePackage { ... }, 15 => class Composer\Package\CompletePackage { ... }, 16 => class Composer\Package\CompletePackage { ... }, 17 => class Composer\Package\CompletePackage { ... }, 18 => class Composer\Package\CompletePackage { ... }, 19 => class Composer\Package\CompletePackage { ... }, 20 => class Composer\Package\CompletePackage { ... }, 21 => class Composer\Package\CompletePackage { ... }, 22 => class Composer\Package\CompletePackage { ... }, 23 => class Composer\Package\CompletePackage { ... }, 24 => class Composer\Package\CompletePackage { ... }, 25 => class Composer\Package\CompletePackage { ... }, 26 => class Composer\Package\CompletePackage { ... }, 27 => class Composer\Package\CompletePackage { ... }, 28 => class Composer\Package\CompletePackage { ... }, 29 => class Composer\Package\CompletePackage { ... }, 30 => class Composer\Package\CompletePackage { ... }, 31 => class Composer\Package\CompletePackage { ... }, 32 => class Composer\Package\CompletePackage { ... }, 33 => class Composer\Package\CompletePackage { ... }, 34 => class Composer\Package\CompletePackage { ... }, 35 => class Composer\Package\CompletePackage { ... }, 36 => class Composer\Package\CompletePackage { ... }, 37 => class Composer\Package\CompletePackage { ... }, 38 => class Composer\Package\CompletePackage { ... }, 39 => class Composer\Package\CompletePackage { ... }, 40 => class Composer\Package\CompletePackage { ... }, 41 => class Composer\Package\CompletePackage { ... }, 42 => class Composer\Package\CompletePackage { ... }, 43 => class Composer\Package\CompletePackage { ... }, 44 => class Composer\Package\CompletePackage { ... }, 45 => class Composer\Package\CompletePackage { ... }, 46 => class Composer\Package\CompletePackage { ... }, 47 => class Composer\Package\CompletePackage { ... }, 48 => class Composer\Package\CompletePackage { ... }, 49 => class Composer\Package\CompletePackage { ... }, 50 => class Composer\Package\CompletePackage { ... }, 51 => class Composer\Package\CompletePackage { ... }, 52 => class Composer\Package\CompletePackage { ... }, 53 => class Composer\Package\CompletePackage { ... }, 54 => class Composer\Package\CompletePackage { ... }, 55 => class Composer\Package\CompletePackage { ... }) }, $mainPackage = class Composer\Package\RootPackage { protected $minimumStability = 'stable'; protected $preferStable = FALSE; protected $stabilityFlags = array (); protected $references = array (); protected $aliases = array (); protected $repositories = array ('typo3' => array (...), 'pagemachine' => array (...), 'packagist' => array (...)); protected $license = array (0 => 'proprietary'); protected $keywords = NULL; protected $authors = NULL; protected $description = 'Haag Streit Distribution'; protected $homepage = NULL; protected $scripts = array (); protected $support = array (); protected $abandoned = FALSE; protected $type = 'library'; protected $targetDir = NULL; protected $installationSource = NULL; protected $sourceType = ''; protected $sourceUrl = ''; protected $sourceReference = 'a0c11fcf0201008ed4f01884a32ba9cd96743232'; protected $sourceMirrors = NULL; protected $distType = ''; protected $distUrl = ''; protected $distReference = 'a0c11fcf0201008ed4f01884a32ba9cd96743232'; protected $distSha1Checksum = NULL; protected $distMirrors = NULL; protected $version = '9999999-dev'; protected $prettyVersion = 'dev-master'; protected $releaseDate = NULL; protected $extra = array ('typo3/cms' => array (...)); protected $binaries = array (); protected $dev = TRUE; protected $stability = 'dev'; protected $notificationUrl = NULL; protected $requires = array ('php' => class Composer\Package\Link { ... }, 'typo3/cms' => class Composer\Package\Link { ... }, 'helhum/typo3-console' => class Composer\Package\Link { ... }, 'pagemachine/typo3-base' => class Composer\Package\Link { ... }, 'typo3-ter/vhs' => class Composer\Package\Link { ... }, 'typo3-ter/realurl' => class Composer\Package\Link { ... }, 'typo3-ter/news' => class Composer\Package\Link { ... }, 'typo3-ter/powermail' => class Composer\Package\Link { ... }, 'teaminmedias-pluswerk/ke_search' => class Composer\Package\Link { ... }, 'typo3-ter/gridelements' => class Composer\Package\Link { ... }, 'gordalina/cachetool' => class Composer\Package\Link { ... }, 'typo3-ter/dd-googlesitemap' => class Composer\Package\Link { ... }, 'typo3-ter/go-maps-ext' => class Composer\Package\Link { ... }, 'typo3-ter/media' => class Composer\Package\Link { ... }); protected $conflicts = array (); protected $provides = array (); protected $replaces = array (); protected $devRequires = array ('phpunit/phpunit' => class Composer\Package\Link { ... }, 'jakub-onderka/php-parallel-lint' => class Composer\Package\Link { ... }, 'jakub-onderka/php-console-highlighter' => class Composer\Package\Link { ... }); protected $suggests = array (); protected $autoload = array ('psr-4' => array (...), 'classmap' => array (...)); protected $devAutoload = array ('psr-4' => array (...)); protected $includePaths = array (0 => 'vendor/pear/http_request2/', 1 => 'vendor/pear/net_url2/'); protected $archiveExcludes = array (); public $id = -1; protected $name = 'pagemachine/haag-streit-distribution'; protected $prettyName = 'pagemachine/haag-streit-distribution'; protected $repository = NULL; protected $transportOptions = array () }, $installationManager = class Composer\Installer\InstallationManager { private $installers = array (0 => class TYPO3\CMS\Composer\Installer\ExtensionInstaller { ... }, 1 => class TYPO3\CMS\Composer\Installer\CoreInstaller { ... }, 2 => class Composer\Installer\MetapackageInstaller { ... }, 3 => class Composer\Installer\PluginInstaller { ... }, 4 => class Composer\Installer\PearInstaller { ... }, 5 => class Composer\Installer\LibraryInstaller { ... }); private $cache = array ('composer-plugin' => class Composer\Installer\PluginInstaller { ... }, 'library' => class Composer\Installer\LibraryInstaller { ... }, 'class' => class Composer\Installer\LibraryInstaller { ... }, 'typo3-cms-extension' => class TYPO3\CMS\Composer\Installer\ExtensionInstaller { ... }, 'typo3-cms-core' => class TYPO3\CMS\Composer\Installer\CoreInstaller { ... }); private $notifiablePackages = array () }, $targetDir = '/.../vendor/composer', $scanPsr0Packages = FALSE, $suffix = ???) phar:///usr/local/bin/composer/src/Composer/Installer.php:291
   23.1903  288758144  12. Composer\EventDispatcher\EventDispatcher->dispatchScript($eventName = 'post-autoload-dump', $devMode = TRUE, $additionalArgs = array (), $flags = array ('optimize' => FALSE)) phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php:296
   23.1904  288758312  13. Composer\EventDispatcher\EventDispatcher->doDispatch($event = class Composer\Script\Event { private $composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private $io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private $devMode = TRUE; protected $name = 'post-autoload-dump'; protected $args = array (); protected $flags = array ('optimize' => FALSE); private ${Composer\EventDispatcher\Event}:propagationStopped = FALSE }) phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:95
   24.6622  289626432  14. call_user_func:{phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:170}(array (0 => class TYPO3\CMS\Composer\Installer\Plugin {  }, 1 => 'postAutoload'), class Composer\Script\Event { private $composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private $io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private $devMode = TRUE; protected $name = 'post-autoload-dump'; protected $args = array (); protected $flags = array ('optimize' => FALSE); private ${Composer\EventDispatcher\Event}:propagationStopped = FALSE }) phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:170
   24.6622  289626504  15. TYPO3\CMS\Composer\Installer\Plugin->postAutoload($event = class Composer\Script\Event { private $composer = class Composer\Composer { private $package = class Composer\Package\RootPackage { ... }; private $locker = class Composer\Package\Locker { ... }; private $repositoryManager = class Composer\Repository\RepositoryManager { ... }; private $downloadManager = class Composer\Downloader\DownloadManager { ... }; private $installationManager = class Composer\Installer\InstallationManager { ... }; private $pluginManager = class Composer\Plugin\PluginManager { ... }; private $config = class Composer\Config { ... }; private $eventDispatcher = class Composer\EventDispatcher\EventDispatcher { ... }; private $autoloadGenerator = class Composer\Autoload\AutoloadGenerator { ... } }; private $io = class Composer\IO\ConsoleIO { protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; protected $lastMessage = NULL; protected $lastMessageErr = '<info>Generating autoload files</info>'; private $startTime = NULL; private $verbosityMap = array (...); protected $authentications = array (...) }; private $devMode = TRUE; protected $name = 'post-autoload-dump'; protected $args = array (); protected $flags = array ('optimize' => FALSE); private ${Composer\EventDispatcher\Event}:propagationStopped = FALSE }) phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:170

PHP Parse Error

I have the following problem:
PHP Parse error: syntax error, unexpected ':', expecting ';' or '{' in cms-composer-installers/src/Plugin/Util/ExtensionKeyResolver.php on line 32

If i remove the ": String" of the function "public static function resolve(PackageInterface $package): string"

in cms-composer-installers/src/Plugin/Util/ExtensionKeyResolver.php then it seems to work

1.5.7 broke on older composer versions due to Undefined class constant 'RUNTIME_API_VERSION'

With update from 1.5.6 to 1.5.7 we receive the following PHP Fatal error in our CIs. Those CIs still run an older Composer 1.x version. In case you need the concrete version, I can look it up.

Updating dependencies (including require-dev)
Package operations: 99 installs, 0 updates, 0 removals
  - Installing typo3/cms-composer-installers (v1.5.7): Downloading (100%)
PHP Fatal error:  Uncaught Error: Undefined class constant 'RUNTIME_API_VERSION' in /srv/project/vendor/typo3/cms-composer-installers/src/Installer/Plugin.php:86
Stack trace:

Fatal error: Uncaught Error: Undefined class constant 'RUNTIME_API_VERSION' in /srv/project/vendor/typo3/cms-composer-installers/src/Installer/Plugin.php:86
Stack trace:
#0 phar:///usr/bin/composer/src/Composer/Plugin/PluginManager.php(237): TYPO3\CMS\Composer\Installer\Plugin->activate(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#0 phar:///usr/bin/composer/src/Composer/Plugin/PluginManager.php(237): TYPO3\CMS\Composer\Installer\Plugin->activate(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#1 phar:///usr/bin/composer/src/Composer/Plugin/PluginManager.php(206): Composer\Plugin\PluginManager->addPlugin(Object(TYPO3\CMS\Composer\Installer\Plugin))
#1 phar:///usr/bin/composer/src/Composer/Plugin/PluginManager.php(206): Composer\Plugin\PluginManager->addPlugin(Object(TYPO3\CMS\Composer\Installer\Plugin))
#2 phar:///usr/bin/composer/src/Composer/Installer/PluginInstaller.php(62): Composer\Plugin\PluginManager->registerPackage(Object(Composer\Package\CompletePackage), true)
#2 phar:///usr/bin/composer/src/Composer/Installer/PluginInstaller.php(62): Composer\Plugin\PluginManager->registerPackage(Object(Composer\Package\CompletePackage), true)
#3 phar:///usr/bin/composer/src/Composer/Installer/InstallationManager.php(173): Composer\Installer\PluginInstaller->install(Object(Composer\Repository\InstalledFilesystemRepository), Object(Composer\Package\CompletePackage))
#4 phar:///usr/bin/composer/src/Composer/Installer/InstallationManager.php(160): Composer\Installer\InstallationManager->install(Object( in /srv/project/vendor/typo3/cms-composer-installers/src/Installer/Plugin.php on line 86
#3 phar:///usr/bin/composer/src/Composer/Installer/InstallationManager.php(173): Composer\Installer\PluginInstaller->install(Object(Composer\Repository\InstalledFilesystemRepository), Object(Composer\Package\CompletePackage))
#4 phar:///usr/bin/composer/src/Composer/Installer/InstallationManager.php(160): Composer\Installer\InstallationManager->install(Object( in /srv/project/vendor/typo3/cms-composer-installers/src/Installer/Plugin.php on line 86
0

Option to deactivate the symlink creation on composer install

On some hosting providers (e. g. domainfactory) you can't create symlinks to files. So you have to copy the index.php into your web folder. When you then do a composer install, the file will get replaced with a symlink again.

So I think an option to deactivate this symlink creation would be very useful.

Replace index.php symlink with require

Currently a symlink of index.php is created which points to the index.php in typo3-cms.

There are some hosts (e.g. DomainFactory) which generate a 500 Server Error for symlinked PHP files. The simple workaround is to use a require within a normal PHP file:

<?php
require '../typo3_src/index.php';

Consider using junctions on windows

Is there a known good reason why typo3/cms-composer-installers tries to generate symlinks on windows (which require SeCreateSymbolicLinkPrivilege, causing the installer to suggest running composer as admin) instead of junctions (for {web-dir}/typo3) or hardlinks (for {web-dir}/index.php)?

$symlinkSuccessfull = $this->getProcess()->execute('mklink' . $parameter . ' ' . escapeshellarg($symlinkTarget) . ' ' . escapeshellarg($symlinkSource), $output) === 0;

Actually composer already creates junctions for path repositories, so it would probably be good to do the same in typo3/cms-composer-installers:
https://github.com/composer/composer/blob/6f3310c762b658bca64e060262ea2b1d4a1ec4b0/src/Composer/Downloader/PathDownloader.php#L94

Advantage: Junction do work without administrator privileges, which allows to drop unpleasant "please ensure your are running the Composer command with administrator rights" advise.

Consolidate `extra` section documentation

Hey Hey,

the installer may read some settings from the extra section of given composer files. These options are documented in the README of the Plugin and in the TYPO3 Extension Architecture Docs.

The setting ['extra']['typo3/cms']['web-dir'] is described in the README only. The setting ['extra']['typo3/cms']['extension-key'] is described in the API docs only. The setting ['extra']['installer-name'] is not documented at all.

I propose to consolidate this information. Either describe all available settings in the docs of this plugin or within the core docs. Add a link to each other on both places anyway.

Composer installer > 1.0.24 support

Aimeos has extensions itself and relies on composer/installers for installation in Laravel, Symfony and even TYPO3. This was OK because Aimeos extensions are supported by composer/installers:1.0.24 which is the only one accepted by this package.

Now, after composer 2.0 was released, we have the problem that composer 2.0 offers composer-plugin-api:2.0 which requires composer/installers:1.9 and there's no way to install the Aimeos TYPO3 extension via composer any more because of the version conflict for composer/installers.

What is the reason that the TYPO3 composer installers package restricts the composer/installers exactly to 10.24 and is there a way to update composer/installers to 1.9+?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.