diff --git a/lib/private/app.php b/lib/private/app.php index 3b8cbba3898..7917c1c0c01 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -567,7 +567,7 @@ class OC_App { } /** - * get the last version of the app from appinfo/info.xml + * get the last version of the app, either from appinfo/version or from appinfo/info.xml * * @param string $appId * @return string @@ -587,9 +587,14 @@ class OC_App { * @return string */ public static function getAppVersionByPath($path) { + $versionFile = $path . '/appinfo/version'; $infoFile = $path . '/appinfo/info.xml'; - $appData = self::getAppInfo($infoFile, true); - return isset($appData['version']) ? $appData['version'] : ''; + if (is_file($versionFile)) { + return trim(file_get_contents($versionFile)); + } else { + $appData = self::getAppInfo($infoFile, true); + return isset($appData['version']) ? $appData['version'] : ''; + } } diff --git a/lib/private/app/appmanager.php b/lib/private/app/appmanager.php index 69e5334774e..fba5bb19f61 100644 --- a/lib/private/app/appmanager.php +++ b/lib/private/app/appmanager.php @@ -299,6 +299,9 @@ class AppManager implements IAppManager { /** * Returns the app information from "appinfo/info.xml". * + * If no version was present in "appinfo/info.xml", reads it + * from the external "appinfo/version" file instead. + * * @param string $appId app id * * @return array app iinfo diff --git a/lib/private/installer.php b/lib/private/installer.php index 36fda28cd27..64f84d58b54 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -389,11 +389,16 @@ class OC_Installer{ } // check if the ocs version is the same as the version in info.xml/version - $version = trim($info['version']); + $versionFile= $extractDir.'/appinfo/version'; + if(is_file($versionFile)) { + $version = trim(file_get_contents($versionFile)); + }else{ + $version = trim($info['version']); + } if(isset($data['appdata']['version']) && $version<>trim($data['appdata']['version'])) { OC_Helper::rmdirr($extractDir); - throw new \Exception($l->t("App can't be installed because the version in info.xml is not the same as the version reported from the app store")); + throw new \Exception($l->t("App can't be installed because the version in info.xml/version is not the same as the version reported from the app store")); } return $info; diff --git a/lib/public/app.php b/lib/public/app.php index 032116eb43f..e25f025d12d 100644 --- a/lib/public/app.php +++ b/lib/public/app.php @@ -142,7 +142,7 @@ class App { } /** - * Get the last version of the app from appinfo/info.xml + * Get the last version of the app, either from appinfo/version or from appinfo/info.xml * @param string $app * @return string * @since 4.0.0 diff --git a/tests/data/testapp.zip b/tests/data/testapp.zip index c828572827f..e76c0d18724 100644 Binary files a/tests/data/testapp.zip and b/tests/data/testapp.zip differ diff --git a/tests/data/testapp2.zip b/tests/data/testapp2.zip index 1953cc896f8..f46832f7a75 100644 Binary files a/tests/data/testapp2.zip and b/tests/data/testapp2.zip differ