From add1ae945d71f6efd3d3e1e39efaca7286f77e09 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 25 Jan 2012 11:50:59 -0800 Subject: [PATCH] Use setConcreteOnly() in Phabricator and only list/launch concrete Daemons Summary: We currently allow you to launch abstract daemons; use setConcreteOnly() to only list/launch concrete daemons. Test Plan: Ran "phd list" (no abstract daemons listed), "phd launch PhabricatorRepositoryCommitDiscoveryDaemon" (reasonable error message). Reviewers: btrahan, jungejason Reviewed By: btrahan CC: aran, epriestley Maniphest Tasks: T801 Differential Revision: https://secure.phabricator.com/D1487 --- .../console/PhabricatorConduitConsoleController.php | 13 +++---------- .../drydock/blueprint/base/DrydockBlueprint.php | 5 +---- .../daemon/control/PhabricatorDaemonControl.php | 4 +++- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/applications/conduit/controller/console/PhabricatorConduitConsoleController.php b/src/applications/conduit/controller/console/PhabricatorConduitConsoleController.php index c90dc32883..68825fb93d 100644 --- a/src/applications/conduit/controller/console/PhabricatorConduitConsoleController.php +++ b/src/applications/conduit/controller/console/PhabricatorConduitConsoleController.php @@ -1,7 +1,7 @@ setAncestorClass('ConduitAPIMethod') ->setType('class') + ->setConcreteOnly(true) ->selectSymbolsWithoutLoading(); - $class_names = array_values(ipull($classes, 'name')); - foreach ($class_names as $key => $class_name) { - $class_info = new ReflectionClass($class_name); - if ($class_info->isAbstract()) { - unset($class_names[$key]); - } - } - - return array_values($class_names); + return array_values(ipull($classes, 'name')); } } diff --git a/src/applications/drydock/blueprint/base/DrydockBlueprint.php b/src/applications/drydock/blueprint/base/DrydockBlueprint.php index 8d0982b250..87b2b273f3 100644 --- a/src/applications/drydock/blueprint/base/DrydockBlueprint.php +++ b/src/applications/drydock/blueprint/base/DrydockBlueprint.php @@ -39,13 +39,10 @@ abstract class DrydockBlueprint { $blueprints = id(new PhutilSymbolLoader()) ->setType('class') ->setAncestorClass('DrydockBlueprint') + ->setConcreteOnly(true) ->selectAndLoadSymbols(); $list = ipull($blueprints, 'name', 'name'); foreach ($list as $class_name => $ignored) { - $reflection = new ReflectionClass($class_name); - if ($reflection->isAbstract()) { - continue; - } $list[$class_name] = newv($class_name, array()); } } diff --git a/src/infrastructure/daemon/control/PhabricatorDaemonControl.php b/src/infrastructure/daemon/control/PhabricatorDaemonControl.php index 6bf66dab1b..819e038373 100644 --- a/src/infrastructure/daemon/control/PhabricatorDaemonControl.php +++ b/src/infrastructure/daemon/control/PhabricatorDaemonControl.php @@ -203,7 +203,8 @@ EOHELP $symbols = $this->loadAvailableDaemonClasses(); $symbols = ipull($symbols, 'name', 'name'); if (empty($symbols[$daemon])) { - throw new Exception("Daemon '{$daemon}' is not known."); + throw new Exception( + "Daemon '{$daemon}' is not loaded, misspelled or abstract."); } $pid_dir = $this->getControlDirectory('pid'); @@ -299,6 +300,7 @@ EOHELP $loader = new PhutilSymbolLoader(); return $loader ->setAncestorClass('PhutilDaemon') + ->setConcreteOnly(true) ->selectSymbolsWithoutLoading(); }