]> source.dussan.org Git - nextcloud-server.git/commitdiff
rework api of DependencyAnalyzer
authorThomas Müller <thomas.mueller@tmit.eu>
Fri, 12 Dec 2014 11:34:53 +0000 (12:34 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Fri, 12 Dec 2014 11:34:53 +0000 (12:34 +0100)
lib/private/app.php
lib/private/app/dependencyanalyzer.php
settings/controller/appsettingscontroller.php
tests/lib/app/dependencyanalyzer.php

index c84e9c5e98135f7085cc23ef2bb39de11f1eaf90..ecdc8ca8320ae1d3aadfb38c017c02487a6db0c2 100644 (file)
@@ -1112,8 +1112,8 @@ class OC_App {
                        }
 
                        // check for required dependencies
-                       $dependencyAnalyzer = new DependencyAnalyzer($app, new Platform($config), $l);
-                       $missing = $dependencyAnalyzer->analyze();
+                       $dependencyAnalyzer = new DependencyAnalyzer(new Platform($config), $l);
+                       $missing = $dependencyAnalyzer->analyze($app);
                        if(!empty($missing)) {
                                $missingMsg = join(PHP_EOL, $missing);
                                throw new \Exception(
index 92f65be1cd2318660714cc8d4ba4ead3b392c841..ae40e8523fcea73ddda04cf388cb8bf5372753f3 100644 (file)
@@ -1,5 +1,5 @@
 <?php
- /**
+/**
  * @author Thomas Müller
  * @copyright 2014 Thomas Müller deepdiver@owncloud.com
  *
@@ -20,112 +20,114 @@ class DependencyAnalyzer {
        /** @var \OCP\IL10N */
        private $l;
 
-       /** @var array  */
-       private $missing = array();
-
-       /** @var array  */
-       private $dependencies = array();
-
-       private $appInfo = array();
-
        /**
-        * @param array $app
         * @param Platform $platform
         * @param \OCP\IL10N $l
         */
-       function __construct(array $app, Platform $platform, IL10N $l) {
+       function __construct(Platform $platform, IL10N $l) {
                $this->platform = $platform;
                $this->l = $l;
-               if (isset($app['dependencies'])) {
-                       $this->dependencies = $app['dependencies'];
-               }
        }
 
        /**
         * @param array $app
         * @returns array of missing dependencies
         */
-       public function analyze() {
-               $this->analyzePhpVersion();
-               $this->analyzeDatabases();
-               $this->analyzeCommands();
-               $this->analyzeLibraries();
-               $this->analyzeOS();
-               $this->analyzeOC();
-               return $this->missing;
+       public function analyze($app) {
+               $this->appInfo = $app;
+               if (isset($app['dependencies'])) {
+                       $dependencies = $app['dependencies'];
+               } else {
+                       $dependencies = [];
+               }
+
+               return array_merge(
+                       $this->analyzePhpVersion($dependencies),
+                       $this->analyzeDatabases($dependencies),
+                       $this->analyzeCommands($dependencies),
+                       $this->analyzeLibraries($dependencies),
+                       $this->analyzeOS($dependencies),
+                       $this->analyzeOC($dependencies, $app));
        }
 
-       private function analyzePhpVersion() {
-               if (isset($this->dependencies['php']['@attributes']['min-version'])) {
-                       $minVersion = $this->dependencies['php']['@attributes']['min-version'];
+       private function analyzePhpVersion($dependencies) {
+               $missing = [];
+               if (isset($dependencies['php']['@attributes']['min-version'])) {
+                       $minVersion = $dependencies['php']['@attributes']['min-version'];
                        if (version_compare($this->platform->getPhpVersion(), $minVersion, '<')) {
-                               $this->addMissing((string)$this->l->t('PHP %s or higher is required.', $minVersion));
+                               $missing[] = (string)$this->l->t('PHP %s or higher is required.', $minVersion);
                        }
                }
-               if (isset($this->dependencies['php']['@attributes']['max-version'])) {
-                       $maxVersion = $this->dependencies['php']['@attributes']['max-version'];
+               if (isset($dependencies['php']['@attributes']['max-version'])) {
+                       $maxVersion = $dependencies['php']['@attributes']['max-version'];
                        if (version_compare($this->platform->getPhpVersion(), $maxVersion, '>')) {
-                               $this->addMissing((string)$this->l->t('PHP with a version lower than %s is required.', $maxVersion));
+                               $missing[] = (string)$this->l->t('PHP with a version lower than %s is required.', $maxVersion);
                        }
                }
+               return $missing;
        }
 
-       private function analyzeDatabases() {
-               if (!isset($this->dependencies['database'])) {
-                       return;
+       private function analyzeDatabases($dependencies) {
+               $missing = [];
+               if (!isset($dependencies['database'])) {
+                       return $missing;
                }
 
-               $supportedDatabases = $this->dependencies['database'];
+               $supportedDatabases = $dependencies['database'];
                if (empty($supportedDatabases)) {
-                       return;
+                       return $missing;
                }
                if (!is_array($supportedDatabases)) {
                        $supportedDatabases = array($supportedDatabases);
                }
-               $supportedDatabases = array_map(function($db) {
+               $supportedDatabases = array_map(function ($db) {
                        return $this->getValue($db);
                }, $supportedDatabases);
                $currentDatabase = $this->platform->getDatabase();
                if (!in_array($currentDatabase, $supportedDatabases)) {
-                       $this->addMissing((string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases)));
+                       $missing[] = (string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases));
                }
+               return $missing;
        }
 
-       private function analyzeCommands() {
-               if (!isset($this->dependencies['command'])) {
-                       return;
+       private function analyzeCommands($dependencies) {
+               $missing = [];
+               if (!isset($dependencies['command'])) {
+                       return $missing;
                }
 
-               $commands = $this->dependencies['command'];
+               $commands = $dependencies['command'];
                if (!is_array($commands)) {
                        $commands = array($commands);
                }
                $os = $this->platform->getOS();
-               foreach($commands as $command) {
+               foreach ($commands as $command) {
                        if (isset($command['@attributes']['os']) && $command['@attributes']['os'] !== $os) {
                                continue;
                        }
                        $commandName = $this->getValue($command);
                        if (!$this->platform->isCommandKnown($commandName)) {
-                               $this->addMissing((string)$this->l->t('The command line tool %s could not be found', $commandName));
+                               $missing[] = (string)$this->l->t('The command line tool %s could not be found', $commandName);
                        }
                }
+               return $missing;
        }
 
-       private function analyzeLibraries() {
-               if (!isset($this->dependencies['lib'])) {
-                       return;
+       private function analyzeLibraries($dependencies) {
+               $missing = [];
+               if (!isset($dependencies['lib'])) {
+                       return $missing;
                }
 
-               $libs = $this->dependencies['lib'];
+               $libs = $dependencies['lib'];
                if (!is_array($libs)) {
                        $libs = array($libs);
                }
-               foreach($libs as $lib) {
+               foreach ($libs as $lib) {
                        $libName = $this->getValue($lib);
                        $libVersion = $this->platform->getLibraryVersion($libName);
                        if (is_null($libVersion)) {
-                               $this->addMissing((string)$this->l->t('The library %s is not available.', $libName));
+                               $missing[] = (string)$this->l->t('The library %s is not available.', $libName);
                                continue;
                        }
 
@@ -133,29 +135,31 @@ class DependencyAnalyzer {
                                if (isset($lib['@attributes']['min-version'])) {
                                        $minVersion = $lib['@attributes']['min-version'];
                                        if (version_compare($libVersion, $minVersion, '<')) {
-                                               $this->addMissing((string)$this->l->t('Library %s with a version higher than %s is required - available version %s.',
-                                                       array($libName, $minVersion, $libVersion)));
+                                               $missing[] = (string)$this->l->t('Library %s with a version higher than %s is required - available version %s.',
+                                                       array($libName, $minVersion, $libVersion));
                                        }
                                }
                                if (isset($lib['@attributes']['max-version'])) {
                                        $maxVersion = $lib['@attributes']['max-version'];
                                        if (version_compare($libVersion, $maxVersion, '>')) {
-                                               $this->addMissing((string)$this->l->t('Library %s with a version lower than %s is required - available version %s.',
-                                                       array($libName, $maxVersion, $libVersion)));
+                                               $missing[] = (string)$this->l->t('Library %s with a version lower than %s is required - available version %s.',
+                                                       array($libName, $maxVersion, $libVersion));
                                        }
                                }
                        }
                }
+               return $missing;
        }
 
-       private function analyzeOS() {
-               if (!isset($this->dependencies['os'])) {
-                       return;
+       private function analyzeOS($dependencies) {
+               $missing = [];
+               if (!isset($dependencies['os'])) {
+                       return $missing;
                }
 
-               $oss = $this->dependencies['os'];
+               $oss = $dependencies['os'];
                if (empty($oss)) {
-                       return;
+                       return $missing;
                }
                if (is_array($oss)) {
                        $oss = array_map(function ($os) {
@@ -166,34 +170,37 @@ class DependencyAnalyzer {
                }
                $currentOS = $this->platform->getOS();
                if (!in_array($currentOS, $oss)) {
-                       $this->addMissing((string)$this->l->t('Following platforms are supported: %s', join(', ', $oss)));
+                       $missing[] = (string)$this->l->t('Following platforms are supported: %s', join(', ', $oss));
                }
+               return $missing;
        }
 
-       private function analyzeOC() {
+       private function analyzeOC($dependencies, $appInfo) {
+               $missing = [];
                $minVersion = null;
-               if (isset($this->dependencies['owncloud']['@attributes']['min-version'])) {
-                       $minVersion = $this->dependencies['owncloud']['@attributes']['min-version'];
-               } elseif (isset($this->appInfo['requiremin'])) {
-                       $minVersion = $this->appInfo['requiremin'];
+               if (isset($dependencies['owncloud']['@attributes']['min-version'])) {
+                       $minVersion = $dependencies['owncloud']['@attributes']['min-version'];
+               } elseif (isset($appInfo['requiremin'])) {
+                       $minVersion = $appInfo['requiremin'];
                }
                $maxVersion = null;
-               if (isset($this->dependencies['owncloud']['@attributes']['max-version'])) {
-                       $maxVersion = $this->dependencies['owncloud']['@attributes']['max-version'];
-               } elseif (isset($this->appInfo['requiremax'])) {
-                       $maxVersion = $this->appInfo['requiremax'];
+               if (isset($dependencies['owncloud']['@attributes']['max-version'])) {
+                       $maxVersion = $dependencies['owncloud']['@attributes']['max-version'];
+               } elseif (isset($appInfo['requiremax'])) {
+                       $maxVersion = $appInfo['requiremax'];
                }
 
                if (!is_null($minVersion)) {
                        if (version_compare($this->platform->getOcVersion(), $minVersion, '<')) {
-                               $this->addMissing((string)$this->l->t('ownCloud %s or higher is required.', $minVersion));
+                               $missing[] = (string)$this->l->t('ownCloud %s or higher is required.', $minVersion);
                        }
                }
                if (!is_null($maxVersion)) {
                        if (version_compare($this->platform->getOcVersion(), $maxVersion, '>')) {
-                               $this->addMissing((string)$this->l->t('ownCloud with a version lower than %s is required.', $maxVersion));
+                               $missing[] = (string)$this->l->t('ownCloud with a version lower than %s is required.', $maxVersion);
                        }
                }
+               return $missing;
        }
 
        /**
@@ -205,11 +212,4 @@ class DependencyAnalyzer {
                        return $element['@value'];
                return (string)$element;
        }
-
-       /**
-        * @param $minVersion
-        */
-       private function addMissing($message) {
-               $this->missing[] = $message;
-       }
 }
index 3ad52bd2187ee9577eea85125748e72fb99394bb..b9e60c376de78de55401814ca7cb648432b02768 100644 (file)
@@ -118,7 +118,8 @@ class AppSettingsController extends Controller {
                }
 
                // fix groups to be an array
-               $apps = array_map(function($app){
+               $dependencyAnalyzer = new DependencyAnalyzer(new Platform($this->config), $this->l10n);
+               $apps = array_map(function($app) use ($dependencyAnalyzer) {
                        $groups = array();
                        if (is_string($app['groups'])) {
                                $groups = json_decode($app['groups']);
@@ -127,8 +128,7 @@ class AppSettingsController extends Controller {
                        $app['canUnInstall'] = !$app['active'] && $app['removable'];
 
                        // analyse dependencies
-                       $dependencyAnalyzer = new DependencyAnalyzer($app, new Platform($this->config), $this->l10n);
-                       $missing = $dependencyAnalyzer->analyze();
+                       $missing = $dependencyAnalyzer->analyze($app);
 
                        $app['canInstall'] = empty($missing);
                        $app['missingDependencies'] = $missing;
index 8443dc5d319a75a3af49001bea8eda702ce8abcc..a79995b78b3e80fbb005efae46e12b541a20682e 100644 (file)
@@ -15,16 +15,15 @@ use OCP\IL10N;
 
 class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
 
-       /**
-        * @var Platform
-        */
+       /** @var Platform */
        private $platformMock;
 
-       /**
-        * @var IL10N
-        */
+       /** @var IL10N */
        private $l10nMock;
 
+       /** @var \OC\App\DependencyAnalyzer */
+       private $analyser;
+
        public function setUp() {
                $this->platformMock = $this->getMockBuilder('\OC\App\Platform')
                        ->disableOriginalConstructor()
@@ -63,6 +62,8 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                        ->will($this->returnCallback(function($text, $parameters = array()) {
                                return vsprintf($text, $parameters);
                        }));
+
+               $this->analyser = new \OC\App\DependencyAnalyzer($this->platformMock, $this->l10nMock);
        }
 
        /**
@@ -80,8 +81,7 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                if (!is_null($maxVersion)) {
                        $app['dependencies']['php']['@attributes']['max-version'] = $maxVersion;
                }
-               $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
-               $missing = $analyser->analyze();
+               $missing = $this->analyser->analyze($app);
 
                $this->assertTrue(is_array($missing));
                $this->assertEquals($expectedMissing, $missing);
@@ -98,8 +98,7 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                if (!is_null($databases)) {
                        $app['dependencies']['database'] = $databases;
                }
-               $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
-               $missing = $analyser->analyze();
+               $missing = $this->analyser->analyze($app);
 
                $this->assertTrue(is_array($missing));
                $this->assertEquals($expectedMissing, $missing);
@@ -116,8 +115,7 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                if (!is_null($commands)) {
                        $app['dependencies']['command'] = $commands;
                }
-               $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
-               $missing = $analyser->analyze();
+               $missing = $this->analyser->analyze($app);
 
                $this->assertTrue(is_array($missing));
                $this->assertEquals($expectedMissing, $missing);
@@ -137,8 +135,7 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                        $app['dependencies']['lib'] = $libs;
                }
 
-               $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
-               $missing = $analyser->analyze();
+               $missing = $this->analyser->analyze($app);
 
                $this->assertTrue(is_array($missing));
                $this->assertEquals($expectedMissing, $missing);
@@ -157,8 +154,7 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                        $app['dependencies']['os'] = $oss;
                }
 
-               $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
-               $missing = $analyser->analyze();
+               $missing = $this->analyser->analyze($app);
 
                $this->assertTrue(is_array($missing));
                $this->assertEquals($expectedMissing, $missing);
@@ -177,8 +173,7 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
                        $app['dependencies']['owncloud'] = $oc;
                }
 
-               $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
-               $missing = $analyser->analyze();
+               $missing = $this->analyser->analyze($app);
 
                $this->assertTrue(is_array($missing));
                $this->assertEquals($expectedMissing, $missing);