From dcb88e395b63ac0747b1eb1af5cf3d3e65173efb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 12 Dec 2014 12:34:53 +0100 Subject: [PATCH] rework api of DependencyAnalyzer --- lib/private/app.php | 4 +- lib/private/app/dependencyanalyzer.php | 152 +++++++++--------- settings/controller/appsettingscontroller.php | 6 +- tests/lib/app/dependencyanalyzer.php | 31 ++-- 4 files changed, 94 insertions(+), 99 deletions(-) diff --git a/lib/private/app.php b/lib/private/app.php index c84e9c5e98..ecdc8ca832 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -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( diff --git a/lib/private/app/dependencyanalyzer.php b/lib/private/app/dependencyanalyzer.php index 92f65be1cd..ae40e8523f 100644 --- a/lib/private/app/dependencyanalyzer.php +++ b/lib/private/app/dependencyanalyzer.php @@ -1,5 +1,5 @@ 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; - } } diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php index 3ad52bd218..b9e60c376d 100644 --- a/settings/controller/appsettingscontroller.php +++ b/settings/controller/appsettingscontroller.php @@ -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; diff --git a/tests/lib/app/dependencyanalyzer.php b/tests/lib/app/dependencyanalyzer.php index 8443dc5d31..a79995b78b 100644 --- a/tests/lib/app/dependencyanalyzer.php +++ b/tests/lib/app/dependencyanalyzer.php @@ -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);