[BUGFIX] Unresolvable dependency if composer.json lacks version 83/28683/2
authorClaus Due <claus@namelesscoder.net>
Sun, 23 Mar 2014 22:50:13 +0000 (23:50 +0100)
committerMarkus Klein <klein.t3@mfc-linz.at>
Mon, 24 Mar 2014 12:33:35 +0000 (13:33 +0100)
This change fixes a problem which occurs under these circumstances:

* Extension A depends on Extension B
* Extension B is currently installed
* Extension A is not currently installed
* Extension B has composer.json file
* Extension B composer.json file contains no "version" attribute
  or this attribute is empty.

When installing Extension A in this case, EM will fail with an
error saying "could not resolve dependency for xyz" which is a
bit too vague to be helpful. This change fixes this murky error
by throwing a much more specific error saying exactly that the
error stems from the composer.json file missing a "version" no.

Releases: 6.2
Resolves: #57216
Change-Id: I39ab18d6cf35b69600663524827422c732b813cf
Reviewed-on: https://review.typo3.org/28683
Reviewed-by: Alexander Opitz
Tested-by: Alexander Opitz
Reviewed-by: Markus Klein
Tested-by: Markus Klein
typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php

index 2a0abd2..afe796e 100644 (file)
@@ -206,6 +206,7 @@ class ExtensionManagementUtility {
         * @param string $key The key of the extension to look up, must not be empty
         *
         * @throws \InvalidArgumentException
+        * @throws \TYPO3\CMS\Core\Package\Exception
         * @return string The extension version as a string in the format "x.y.z",
         */
        static public function getExtensionVersion($key) {
@@ -215,7 +216,11 @@ class ExtensionManagementUtility {
                if (!static::isLoaded($key)) {
                        return '';
                }
-               return static::$packageManager->getPackage($key)->getPackageMetaData()->getVersion();
+               $version = static::$packageManager->getPackage($key)->getPackageMetaData()->getVersion();
+               if (empty($version)) {
+                       throw new \TYPO3\CMS\Core\Package\Exception('Version number in composer manifest of package "' . $key . '" is missing or invalid', 1395614959);
+               }
+               return $version;
        }
 
        /**************************************