diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -122,13 +122,15 @@ 'ConduitAPIMethod' => 'applications/conduit/method/ConduitAPIMethod.php', 'ConduitAPIRequest' => 'applications/conduit/protocol/ConduitAPIRequest.php', 'ConduitAPIResponse' => 'applications/conduit/protocol/ConduitAPIResponse.php', + 'ConduitApplicationNotInstalledException' => 'applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php', 'ConduitCall' => 'applications/conduit/call/ConduitCall.php', 'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php', 'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php', 'ConduitConnectionGarbageCollector' => 'applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php', - 'ConduitException' => 'applications/conduit/protocol/ConduitException.php', + 'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php', 'ConduitGetCertificateConduitAPIMethod' => 'applications/conduit/method/ConduitGetCertificateConduitAPIMethod.php', 'ConduitLogGarbageCollector' => 'applications/conduit/garbagecollector/ConduitLogGarbageCollector.php', + 'ConduitMethodNotFoundException' => 'applications/conduit/protocol/exception/ConduitMethodNotFoundException.php', 'ConduitPingConduitAPIMethod' => 'applications/conduit/method/ConduitPingConduitAPIMethod.php', 'ConduitQueryConduitAPIMethod' => 'applications/conduit/method/ConduitQueryConduitAPIMethod.php', 'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php', @@ -2854,12 +2856,14 @@ 'Phobject', 'PhabricatorPolicyInterface', ), + 'ConduitApplicationNotInstalledException' => 'ConduitMethodNotFoundException', 'ConduitCallTestCase' => 'PhabricatorTestCase', 'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod', 'ConduitConnectionGarbageCollector' => 'PhabricatorGarbageCollector', 'ConduitException' => 'Exception', 'ConduitGetCertificateConduitAPIMethod' => 'ConduitAPIMethod', 'ConduitLogGarbageCollector' => 'PhabricatorGarbageCollector', + 'ConduitMethodNotFoundException' => 'ConduitException', 'ConduitPingConduitAPIMethod' => 'ConduitAPIMethod', 'ConduitQueryConduitAPIMethod' => 'ConduitAPIMethod', 'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow', diff --git a/src/applications/conduit/call/ConduitCall.php b/src/applications/conduit/call/ConduitCall.php --- a/src/applications/conduit/call/ConduitCall.php +++ b/src/applications/conduit/call/ConduitCall.php @@ -172,16 +172,13 @@ $method = ConduitAPIMethod::getConduitMethod($method_name); if (!$method) { - throw new ConduitException( - "Conduit method '{$method_name}' does not exist."); + throw new ConduitMethodNotFoundException($method); } $application = $method->getApplication(); if ($application && !$application->isInstalled()) { $app_name = $application->getName(); - throw new ConduitException( - "Method '{$method_name}' belongs to application '{$app_name}', ". - "which is not installed."); + throw new ConduitApplicationNotInstalledException($method, $app_name); } return $method; diff --git a/src/applications/conduit/controller/PhabricatorConduitAPIController.php b/src/applications/conduit/controller/PhabricatorConduitAPIController.php --- a/src/applications/conduit/controller/PhabricatorConduitAPIController.php +++ b/src/applications/conduit/controller/PhabricatorConduitAPIController.php @@ -104,7 +104,9 @@ list($error_code, $error_info) = $auth_error; } } catch (Exception $ex) { - phlog($ex); + if (!($ex instanceof ConduitMethodNotFoundException)) { + phlog($ex); + } $result = null; $error_code = ($ex instanceof ConduitException ? 'ERR-CONDUIT-CALL' diff --git a/src/applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php b/src/applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php new file mode 100644 --- /dev/null +++ b/src/applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php @@ -0,0 +1,14 @@ +errorDescription = $error_description; return $this; } @@ -22,7 +25,7 @@ * * @return string|null Error description, if one is available. */ - public function getErrorDescription() { + final public function getErrorDescription() { return $this->errorDescription; } diff --git a/src/applications/conduit/protocol/exception/ConduitMethodNotFoundException.php b/src/applications/conduit/protocol/exception/ConduitMethodNotFoundException.php new file mode 100644 --- /dev/null +++ b/src/applications/conduit/protocol/exception/ConduitMethodNotFoundException.php @@ -0,0 +1,12 @@ +