Check required classes in setup
Test Plan: Run setup with 'differential.attach-task-class' set to: - '' - 'FacebookTasksAttacher' - 'X' Reviewers: epriestley Reviewed By: epriestley CC: aran, epriestley Differential Revision: https://secure.phabricator.com/D1999
This commit is contained in:
parent
1eca595e4d
commit
330d62984b
35
src/infrastructure/env/PhabricatorEnv.php
vendored
35
src/infrastructure/env/PhabricatorEnv.php
vendored
|
@ -22,21 +22,6 @@
|
||||||
final class PhabricatorEnv {
|
final class PhabricatorEnv {
|
||||||
private static $env;
|
private static $env;
|
||||||
|
|
||||||
private static $requiredClasses = array(
|
|
||||||
'metamta.mail-adapter' => 'PhabricatorMailImplementationAdapter',
|
|
||||||
'metamta.maniphest.reply-handler' => 'PhabricatorMailReplyHandler',
|
|
||||||
'metamta.differential.reply-handler' => 'PhabricatorMailReplyHandler',
|
|
||||||
'metamta.diffusion.reply-handler' => 'PhabricatorMailReplyHandler',
|
|
||||||
'storage.engine-selector' => 'PhabricatorFileStorageEngineSelector',
|
|
||||||
'search.engine-selector' => 'PhabricatorSearchEngineSelector',
|
|
||||||
'differential.field-selector' => 'DifferentialFieldSelector',
|
|
||||||
'maniphest.custom-task-extensions-class' => 'ManiphestTaskExtensions',
|
|
||||||
'aphront.default-application-configuration-class' =>
|
|
||||||
'AphrontApplicationConfiguration',
|
|
||||||
'controller.oauth-registration' => 'PhabricatorOAuthRegistrationController',
|
|
||||||
'differential.attach-task-class' => 'DifferentialTasksAttacher',
|
|
||||||
);
|
|
||||||
|
|
||||||
public static function setEnvConfig(array $config) {
|
public static function setEnvConfig(array $config) {
|
||||||
self::$env = $config;
|
self::$env = $config;
|
||||||
}
|
}
|
||||||
|
@ -48,7 +33,7 @@ final class PhabricatorEnv {
|
||||||
public static function newObjectFromConfig($key, $args = array()) {
|
public static function newObjectFromConfig($key, $args = array()) {
|
||||||
$class = self::getEnvConfig($key);
|
$class = self::getEnvConfig($key);
|
||||||
$object = newv($class, $args);
|
$object = newv($class, $args);
|
||||||
$instanceof = idx(self::$requiredClasses, $key);
|
$instanceof = idx(self::getRequiredClasses(), $key);
|
||||||
if (!($object instanceof $instanceof)) {
|
if (!($object instanceof $instanceof)) {
|
||||||
throw new Exception("Config setting '$key' must be an instance of ".
|
throw new Exception("Config setting '$key' must be an instance of ".
|
||||||
"'$instanceof', is '".get_class($object)."'.");
|
"'$instanceof', is '".get_class($object)."'.");
|
||||||
|
@ -56,6 +41,24 @@ final class PhabricatorEnv {
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getRequiredClasses() {
|
||||||
|
return array(
|
||||||
|
'metamta.mail-adapter' => 'PhabricatorMailImplementationAdapter',
|
||||||
|
'metamta.maniphest.reply-handler' => 'PhabricatorMailReplyHandler',
|
||||||
|
'metamta.differential.reply-handler' => 'PhabricatorMailReplyHandler',
|
||||||
|
'metamta.diffusion.reply-handler' => 'PhabricatorMailReplyHandler',
|
||||||
|
'storage.engine-selector' => 'PhabricatorFileStorageEngineSelector',
|
||||||
|
'search.engine-selector' => 'PhabricatorSearchEngineSelector',
|
||||||
|
'differential.field-selector' => 'DifferentialFieldSelector',
|
||||||
|
'maniphest.custom-task-extensions-class' => 'ManiphestTaskExtensions',
|
||||||
|
'aphront.default-application-configuration-class' =>
|
||||||
|
'AphrontApplicationConfiguration',
|
||||||
|
'controller.oauth-registration' =>
|
||||||
|
'PhabricatorOAuthRegistrationController',
|
||||||
|
'differential.attach-task-class' => 'DifferentialTasksAttacher',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public static function envConfigExists($key) {
|
public static function envConfigExists($key) {
|
||||||
return array_key_exists($key, self::$env);
|
return array_key_exists($key, self::$env);
|
||||||
}
|
}
|
||||||
|
|
|
@ -734,6 +734,22 @@ final class PhabricatorSetup {
|
||||||
self::write("[OKAY] Mail configuration OKAY\n");
|
self::write("[OKAY] Mail configuration OKAY\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self::writeHeader('CONFIG CLASSES');
|
||||||
|
foreach (PhabricatorEnv::getRequiredClasses() as $key => $class) {
|
||||||
|
if (!PhabricatorEnv::getEnvConfig($key)) {
|
||||||
|
self::writeNote("'$key' is not set.");
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
PhabricatorEnv::newObjectFromConfig($key);
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
self::writeFailure();
|
||||||
|
self::write("Setup failure! ".$ex->getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self::write("[OKAY] Config classes OKAY\n");
|
||||||
|
|
||||||
self::writeHeader('SUCCESS!');
|
self::writeHeader('SUCCESS!');
|
||||||
self::write(
|
self::write(
|
||||||
"Congratulations! Your setup seems mostly correct, or at least fairly ".
|
"Congratulations! Your setup seems mostly correct, or at least fairly ".
|
||||||
|
|
Loading…
Reference in a new issue