[TASK] Ignore composer.json dependencies for TYPO3 Extensions 15/42615/6
authorHelmut Hummel <helmut.hummel@typo3.org>
Fri, 14 Aug 2015 11:59:38 +0000 (13:59 +0200)
committerHelmut Hummel <helmut.hummel@typo3.org>
Thu, 10 Sep 2015 13:40:41 +0000 (15:40 +0200)
This resolves problems with composer dependencies and Extension name /
Composer package name differences.

Resolves: #68700
Releases: master
Change-Id: I07f57f24ef7e9337e7ef8f6ee69538c038f2c0ff
Reviewed-on: http://review.typo3.org/42615
Reviewed-by: Alexander Opitz <opitz.alexander@googlemail.com>
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
Reviewed-by: Markus Sommer <markussom@posteo.de>
Tested-by: Markus Sommer <markussom@posteo.de>
Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org>
Tested-by: Helmut Hummel <helmut.hummel@typo3.org>
59 files changed:
typo3/sysext/about/composer.json
typo3/sysext/aboutmodules/composer.json
typo3/sysext/adodb/composer.json
typo3/sysext/backend/composer.json
typo3/sysext/belog/composer.json
typo3/sysext/beuser/composer.json
typo3/sysext/compatibility6/composer.json
typo3/sysext/context_help/composer.json
typo3/sysext/core/Classes/Package/Package.php
typo3/sysext/core/Classes/Package/PackageManager.php
typo3/sysext/core/Tests/Unit/Package/PackageManagerTest.php
typo3/sysext/core/composer.json
typo3/sysext/core/ext_emconf.php
typo3/sysext/cshmanual/composer.json
typo3/sysext/css_styled_content/composer.json
typo3/sysext/dbal/composer.json
typo3/sysext/documentation/composer.json
typo3/sysext/extbase/composer.json
typo3/sysext/extensionmanager/composer.json
typo3/sysext/feedit/composer.json
typo3/sysext/felogin/composer.json
typo3/sysext/filelist/composer.json
typo3/sysext/filemetadata/composer.json
typo3/sysext/fluid/composer.json
typo3/sysext/form/composer.json
typo3/sysext/frontend/composer.json
typo3/sysext/func/composer.json
typo3/sysext/impexp/composer.json
typo3/sysext/indexed_search/composer.json
typo3/sysext/indexed_search_mysql/composer.json
typo3/sysext/info/composer.json
typo3/sysext/info_pagetsconfig/composer.json
typo3/sysext/install/composer.json
typo3/sysext/lang/composer.json
typo3/sysext/linkvalidator/composer.json
typo3/sysext/lowlevel/composer.json
typo3/sysext/mediace/composer.json
typo3/sysext/opendocs/composer.json
typo3/sysext/openid/composer.json
typo3/sysext/recordlist/composer.json
typo3/sysext/recycler/composer.json
typo3/sysext/reports/composer.json
typo3/sysext/rsaauth/composer.json
typo3/sysext/rtehtmlarea/composer.json
typo3/sysext/saltedpasswords/composer.json
typo3/sysext/scheduler/composer.json
typo3/sysext/setup/composer.json
typo3/sysext/sv/composer.json
typo3/sysext/sys_action/composer.json
typo3/sysext/sys_note/composer.json
typo3/sysext/t3editor/composer.json
typo3/sysext/t3skin/composer.json
typo3/sysext/taskcenter/composer.json
typo3/sysext/tstemplate/composer.json
typo3/sysext/version/composer.json
typo3/sysext/viewpage/composer.json
typo3/sysext/wizard_crpages/composer.json
typo3/sysext/wizard_sortpages/composer.json
typo3/sysext/workspaces/composer.json

index 4aa0a3c..ad1bb2c 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index ac2db9f..6b9cacb 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 21b1f75..6e5a978 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 4be9d4b..c8ef42e 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index c3b00d8..2e6dab6 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index df1dc98..cdf0048 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index a9a0de4..ae4564d 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 275339d..97f4f47 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index cb479c0..0bd8138 100644 (file)
@@ -105,14 +105,7 @@ class Package implements PackageInterface {
                $this->packageManager = $packageManager;
                $this->packageKey = $packageKey;
                $this->packagePath = $packagePath;
-               try {
-                       $this->composerManifest = $packageManager->getComposerManifest($this->packagePath);
-               } catch (Exception\MissingPackageManifestException $exception) {
-                       if (!$this->loadExtensionEmconf()) {
-                               throw new Exception\InvalidPackageManifestException('No valid ext_emconf.php file found for package "' . $packageKey . '".', 1360403545);
-                       }
-                       $this->mapExtensionManagerConfigurationToComposerManifest();
-               }
+               $this->composerManifest = $packageManager->getComposerManifest($this->packagePath);
                $this->loadFlagsFromComposerManifest();
        }
 
@@ -189,72 +182,6 @@ class Package implements PackageInterface {
        }
 
        /**
-        * Fetches MetaData information from ext_emconf.php, used for
-        * resolving dependencies as well.
-        *
-        * @return bool
-        */
-       protected function loadExtensionEmconf() {
-               $_EXTKEY = $this->packageKey;
-               $path = $this->packagePath . 'ext_emconf.php';
-               $EM_CONF = NULL;
-               if (@file_exists($path)) {
-                       include $path;
-                       if (is_array($EM_CONF[$_EXTKEY])) {
-                               $this->extensionManagerConfiguration = $EM_CONF[$_EXTKEY];
-                               return TRUE;
-                       }
-               }
-               return FALSE;
-       }
-
-       /**
-        * Fetches information from ext_emconf.php and maps it so it is treated as it would come from composer.json
-        *
-        * @return void
-        */
-       protected function mapExtensionManagerConfigurationToComposerManifest() {
-               if (is_array($this->extensionManagerConfiguration)) {
-                       $extensionManagerConfiguration = $this->extensionManagerConfiguration;
-                       $composerManifest = $this->composerManifest = new \stdClass();
-                       $composerManifest->name = $this->getPackageKey();
-                       $composerManifest->type = 'typo3-cms-extension';
-                       $composerManifest->description = $extensionManagerConfiguration['title'];
-                       $composerManifest->version = $extensionManagerConfiguration['version'];
-                       if (isset($extensionManagerConfiguration['constraints']['depends']) && is_array($extensionManagerConfiguration['constraints']['depends'])) {
-                               $composerManifest->require = new \stdClass();
-                               foreach ($extensionManagerConfiguration['constraints']['depends'] as $requiredPackageKey => $requiredPackageVersion) {
-                                       if (!empty($requiredPackageKey)) {
-                                               $composerManifest->require->$requiredPackageKey = $requiredPackageVersion;
-                                       } else {
-                                               // @todo throw meaningful exception or fail silently?
-                                       }
-                               }
-                       }
-                       if (isset($extensionManagerConfiguration['constraints']['conflicts']) && is_array($extensionManagerConfiguration['constraints']['conflicts'])) {
-                               $composerManifest->conflict = new \stdClass();
-                               foreach ($extensionManagerConfiguration['constraints']['conflicts'] as $conflictingPackageKey => $conflictingPackageVersion) {
-                                       if (!empty($conflictingPackageKey)) {
-                                               $composerManifest->conflict->$conflictingPackageKey = $conflictingPackageVersion;
-                                       } else {
-                                               // @todo throw meaningful exception or fail silently?
-                                       }
-                               }
-                       }
-                       if (isset($extensionManagerConfiguration['constraints']['suggests']) && is_array($extensionManagerConfiguration['constraints']['suggests'])) {
-                               $composerManifest->suggest = new \stdClass();
-                               foreach ($extensionManagerConfiguration['constraints']['suggests'] as $suggestedPackageKey => $suggestedPackageVersion) {
-                                       if (!empty($suggestedPackageKey)) {
-                                               $composerManifest->suggest->$suggestedPackageKey = $suggestedPackageVersion;
-                                       } else {
-                                               // @todo throw meaningful exception or fail silently?
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /**
         * Returns the package meta data object of this package.
         *
         * @return MetaData
@@ -263,23 +190,10 @@ class Package implements PackageInterface {
                if ($this->packageMetaData === NULL) {
                        $this->packageMetaData = new MetaData($this->getPackageKey());
                        $this->packageMetaData->setDescription($this->getValueFromComposerManifest('description'));
-                       $version = $this->getValueFromComposerManifest('version');
-                       if ($version !== NULL) {
-                               $this->packageMetaData->setVersion($version);
-                       } else {
-                               // As version is important within the core we need to make sure it is available
-                               // Fetch it from ext_emconf.php
-                               if ($this->loadExtensionEmconf()) {
-                                       $this->packageMetaData->setVersion($this->extensionManagerConfiguration['version']);
-                               }
-                       }
+                       $this->packageMetaData->setVersion($this->getValueFromComposerManifest('version'));
                        $requirements = $this->getValueFromComposerManifest('require');
                        if ($requirements !== NULL) {
                                foreach ($requirements as $requirement => $version) {
-                                       if ($this->packageRequirementIsComposerPackage($requirement) === FALSE) {
-                                               // Skip non-package requirements
-                                               continue;
-                                       }
                                        $packageKey = $this->packageManager->getPackageKeyFromComposerName($requirement);
                                        // dynamically migrate 'cms' dependency to 'core' dependency
                                        // see also \TYPO3\CMS\Extensionmanager\Utility\ExtensionModelUtility::convertDependenciesToObjects
@@ -294,10 +208,6 @@ class Package implements PackageInterface {
                        $suggestions = $this->getValueFromComposerManifest('suggest');
                        if ($suggestions !== NULL) {
                                foreach ($suggestions as $suggestion => $version) {
-                                       if ($this->packageRequirementIsComposerPackage($suggestion) === FALSE) {
-                                               // Skip non-package requirements
-                                               continue;
-                                       }
                                        $packageKey = $this->packageManager->getPackageKeyFromComposerName($suggestion);
                                        $constraint = new MetaData\PackageConstraint(MetaData::CONSTRAINT_TYPE_SUGGESTS, $packageKey);
                                        $this->packageMetaData->addConstraint($constraint);
@@ -318,21 +228,6 @@ class Package implements PackageInterface {
        }
 
        /**
-        * Check whether the given package requirement (like "typo3/flow" or "php") is a composer package or not
-        *
-        * @param string $requirement the composer requirement string
-        * @return bool TRUE if $requirement is a composer package (contains a slash), FALSE otherwise
-        */
-       protected function packageRequirementIsComposerPackage($requirement) {
-               // According to http://getcomposer.org/doc/02-libraries.md#platform-packages
-               // the following regex should capture all non composer requirements.
-               // typo3 is included in the list because it's a meta package and not supported for now.
-               // typo3/cms is included since it's basically a container and cannot be detected at runtime.
-               // composer/installers is included until extensionmanager can handle composer packages natively
-               return preg_match('/^(php(-64bit)?|ext-[^\/]+|lib-(curl|iconv|libxml|openssl|pcre|uuid|xsl)|typo3|typo3\/cms|composer\/installers)$/', $requirement) !== 1;
-       }
-
-       /**
         * Returns contents of Composer manifest - or part there of if a key is given.
         *
         * @param string $key Optional. Only return the part of the manifest indexed by 'key'
index 829d86a..11b1b96 100644 (file)
@@ -359,7 +359,7 @@ class PackageManager implements \TYPO3\CMS\Core\SingletonInterface {
        }
 
        /**
-        * Fetches all directories from sysext/global/local locations and checks if the extension contains a ext_emconf.php
+        * Fetches all directories from sysext/global/local locations and checks if the extension contains an ext_emconf.php
         *
         * @param array $collectedExtensionPaths
         * @return array
@@ -393,7 +393,7 @@ class PackageManager implements \TYPO3\CMS\Core\SingletonInterface {
        }
 
        /**
-        * Looks for composer.json in the given path and returns TRUE or FALSE if a ext_emconf.php exists
+        * Looks for composer.json in the given path and returns TRUE or FALSE if an ext_emconf.php exists
         * or no composer.json is found.
         *
         * @param string $packagePath
@@ -873,16 +873,122 @@ class PackageManager implements \TYPO3\CMS\Core\SingletonInterface {
         * Returns contents of Composer manifest as a stdObject
         *
         * @param string $manifestPath
-        * @return mixed
+        * @return \stdClass
         * @throws Exception\MissingPackageManifestException
-        * @see json_decode for return values
+        * @throws Exception\InvalidPackageManifestException
         */
        public function getComposerManifest($manifestPath) {
-               if (!file_exists($manifestPath . 'composer.json')) {
-                       throw new Exception\MissingPackageManifestException('No composer manifest file found at "' . $manifestPath . '/composer.json".', 1349868540);
+               $composerManifest = NULL;
+               if (file_exists($manifestPath . 'composer.json')) {
+                       $json = file_get_contents($manifestPath . 'composer.json');
+                       $composerManifest = json_decode($json);
+                       if (!$composerManifest instanceof \stdClass) {
+                               throw new Exception\InvalidPackageManifestException('The composer.json found for extension "' . basename($manifestPath) . '" is invalid!', 1439555561);
+                       }
+               }
+               try {
+                       $extensionManagerConfiguration = $this->getExtensionEmConf($manifestPath);
+                       $composerManifest = $this->mapExtensionManagerConfigurationToComposerManifest(basename($manifestPath), $extensionManagerConfiguration, $composerManifest ?: new \stdClass());
+               } catch (Exception\InvalidPackageManifestException $e) {
+                       if ($composerManifest === NULL) {
+                               throw new Exception\MissingPackageManifestException('Neither a composer.json nor an ext_emconf.php file was found for extension "' . basename($manifestPath) . '"', 1439555560);
+                       }
                }
-               $json = file_get_contents($manifestPath . 'composer.json');
-               return json_decode($json);
+
+               return $composerManifest;
+       }
+
+       /**
+        * Fetches MetaData information from ext_emconf.php, used for
+        * resolving dependencies as well.
+        *
+        * @param string $packagePath
+        * @return array
+        * @throws Exception\InvalidPackageManifestException
+        */
+       protected function getExtensionEmConf($packagePath) {
+               $packageKey = basename($packagePath);
+               $_EXTKEY = $packageKey;
+               $path = $packagePath . 'ext_emconf.php';
+               $EM_CONF = NULL;
+               if (@file_exists($path)) {
+                       include $path;
+                       if (is_array($EM_CONF[$_EXTKEY])) {
+                               return $EM_CONF[$_EXTKEY];
+                       }
+               }
+               throw new Exception\InvalidPackageManifestException('No valid ext_emconf.php file found for package "' . $packageKey . '".', 1360403545);
+       }
+
+       /**
+        * Fetches information from ext_emconf.php and maps it so it is treated as it would come from composer.json
+        *
+        * @param string $packageKey
+        * @param array $extensionManagerConfiguration
+        * @param \stdClass $composerManifest
+        * @return \stdClass
+        * @throws Exception\InvalidPackageManifestException
+        */
+       protected function mapExtensionManagerConfigurationToComposerManifest($packageKey, array $extensionManagerConfiguration, \stdClass $composerManifest) {
+               $this->setComposerManifestValueIfEmpty($composerManifest, 'name', $packageKey);
+               $this->setComposerManifestValueIfEmpty($composerManifest, 'type', 'typo3-cms-extension');
+               $this->setComposerManifestValueIfEmpty($composerManifest, 'description', $extensionManagerConfiguration['title']);
+               $composerManifest->version = $extensionManagerConfiguration['version'];
+               if (isset($extensionManagerConfiguration['constraints']['depends']) && is_array($extensionManagerConfiguration['constraints']['depends'])) {
+                       $composerManifest->require = new \stdClass();
+                       foreach ($extensionManagerConfiguration['constraints']['depends'] as $requiredPackageKey => $requiredPackageVersion) {
+                               if (!empty($requiredPackageKey)) {
+                                       if ($requiredPackageKey === 'typo3') {
+                                               // Add implicit dependency to 'core'
+                                               $composerManifest->require->core = $requiredPackageVersion;
+                                       } elseif ($requiredPackageKey !== 'php') {
+                                               // Skip php dependency
+                                               $composerManifest->require->{$requiredPackageKey} = $requiredPackageVersion;
+                                       }
+                               } else {
+                                       throw new Exception\InvalidPackageManifestException(sprintf('The extension "%s" has invalid version constraints in depends section. Extension key is missing!', $packageKey), 1439552058);
+                               }
+                       }
+               }
+               if (isset($extensionManagerConfiguration['constraints']['conflicts']) && is_array($extensionManagerConfiguration['constraints']['conflicts'])) {
+                       $composerManifest->conflict = new \stdClass();
+                       foreach ($extensionManagerConfiguration['constraints']['conflicts'] as $conflictingPackageKey => $conflictingPackageVersion) {
+                               if (!empty($conflictingPackageKey)) {
+                                       $composerManifest->conflict->$conflictingPackageKey = $conflictingPackageVersion;
+                               } else {
+                                       throw new Exception\InvalidPackageManifestException(sprintf('The extension "%s" has invalid version constraints in conflicts section. Extension key is missing!', $packageKey), 1439552059);
+                               }
+                       }
+               }
+               if (isset($extensionManagerConfiguration['constraints']['suggests']) && is_array($extensionManagerConfiguration['constraints']['suggests'])) {
+                       $composerManifest->suggest = new \stdClass();
+                       foreach ($extensionManagerConfiguration['constraints']['suggests'] as $suggestedPackageKey => $suggestedPackageVersion) {
+                               if (!empty($suggestedPackageKey)) {
+                                       $composerManifest->suggest->$suggestedPackageKey = $suggestedPackageVersion;
+                               } else {
+                                       throw new Exception\InvalidPackageManifestException(sprintf('The extension "%s" has invalid version constraints in suggests section. Extension key is missing!', $packageKey), 1439552060);
+                               }
+                       }
+               }
+               if (isset($extensionManagerConfiguration['autoload'])) {
+                       $composerManifest->autoload = json_decode(json_encode($extensionManagerConfiguration['autoload']));
+               }
+
+               return $composerManifest;
+       }
+
+       /**
+        * @param \stdClass $manifest
+        * @param string $property
+        * @param mixed $value
+        * @return \stdClass
+        */
+       protected function setComposerManifestValueIfEmpty(\stdClass $manifest, $property, $value) {
+               if (empty($manifest->{$property})) {
+                       $manifest->{$property} = $value;
+               }
+
+               return $manifest;
        }
 
        /**
index aa014a8..ddd4bdd 100644 (file)
@@ -67,7 +67,7 @@ class PackageManagerTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
                $packagePath = 'vfs://Test/Packages/Application/' . $packageKey . '/';
                mkdir($packagePath, 0770, TRUE);
                file_put_contents($packagePath . 'ext_emconf.php', '');
-               file_put_contents($packagePath . 'composer.json', '');
+               file_put_contents($packagePath . 'composer.json', '{}');
                $package = new Package($this->packageManager, $packageKey, $packagePath);
                $this->packageManager->registerPackage($package);
                $this->packageManager->activatePackage($packageKey);
index e5a7b5b..abaf279 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "php" : ">=5.5.0"
index e78a630..1176009 100644 (file)
@@ -12,9 +12,7 @@ $EM_CONF[$_EXTKEY] = array(
        'author_company' => '',
        'version' => '7.5.0',
        'constraints' => array(
-               'depends' => array(
-                       'typo3' => '7.5.0-7.5.99',
-               ),
+               'depends' => array(),
                'conflicts' => array(),
                'suggests' => array(),
        ),
index fffd354..68db357 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index d32a30e..28f8ec4 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 6bb346a..5d8d362 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 8b692e8..f97b648 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 85fa0ab..8cba690 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 524e0fe..37703f1 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index a5ccda7..1f0b414 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-3.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index f9d0dd9..5c4fce8 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 35972b4..0dc86c9 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 27eae5c..afa0a9d 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 104f0b6..27786e6 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 375b0f6..22bd434 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 46c8047..a754cc0 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 736aa9b..a018167 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index c5a4e6b..f9e2b9e 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 5dd2472..fa65503 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 46da201..b2dc5bf 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 59cdedb..64f9ffc 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 892a652..60aca6d 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index c88d7df..15004f9 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*",
index f839f70..9dbc9eb 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 866ec3f..7783ac1 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index a046f6e..4d2edae 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 86054c8..3289bec 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index a755d71..0f6fd46 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index ce38114..6394f5f 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*",
index 339b4f6..0bba663 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 0a64978..a16425e 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index d189c98..41debb4 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 08e4ddd..9fb1e97 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 0eef400..8cecf7a 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index bd5c5a8..39f62d9 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 0a9f6c2..751e4e7 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 51e4016..d87690f 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 3c91c17..dca019e 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 8cf0792..ce083c2 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 947e813..ec8fb45 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index def9bc5..846963c 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index d5417e6..a38a16e 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 11b7838..0aeab2c 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 51da7e4..4f226a5 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 04b50f3..2e8565a 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index d2df4fb..b8d9237 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 96bc44c..83013b2 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 9baf88f..4fc1cc9 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"
index 908ed93..b254632 100644 (file)
@@ -4,7 +4,6 @@
        "description": "TYPO3 Core",
        "homepage": "http://typo3.org",
        "license": ["GPL-2.0+"],
-       "version": "7.5.0",
 
        "require": {
                "typo3/cms-core": "*"