diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 2eb13dec..848a4575 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -14,6 +14,7 @@ phutil_register_library_map(array( 'ArcanistBaseUnitTestEngine' => 'unit/engine/base', 'ArcanistBaseWorkflow' => 'workflow/base', 'ArcanistBundle' => 'parser/bundle', + 'ArcanistCallConduitWorkflow' => 'workflow/call-conduit', 'ArcanistChooseInvalidRevisionException' => 'exception', 'ArcanistChooseNoRevisionsException' => 'exception', 'ArcanistCommitWorkflow' => 'workflow/commit', @@ -85,6 +86,7 @@ phutil_register_library_map(array( 'ArcanistAmendWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistApacheLicenseLinter' => 'ArcanistLicenseLinter', 'ArcanistApacheLicenseLinterTestCase' => 'ArcanistLinterTestCase', + 'ArcanistCallConduitWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistCommitWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistCoverWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistDiffParserTestCase' => 'ArcanistPhutilTestCase', diff --git a/src/workflow/call-conduit/ArcanistCallConduitWorkflow.php b/src/workflow/call-conduit/ArcanistCallConduitWorkflow.php new file mode 100644 index 00000000..47998c14 --- /dev/null +++ b/src/workflow/call-conduit/ArcanistCallConduitWorkflow.php @@ -0,0 +1,87 @@ + 'method', + ); + } + + public function shouldShellComplete() { + return false; + } + + public function requiresConduit() { + return true; + } + + public function run() { + $method = $this->getArgument('method', array()); + if (count($method) !== 1) { + throw new ArcanistUsageException( + "Provide exactly one Conduit method name."); + } + $method = reset($method); + + $params = @file_get_contents('php://stdin'); + $params = json_decode($params, true); + if (!is_array($params)) { + throw new ArcanistUsageException( + "Provide method parameters on stdin as a JSON blob."); + } + + $error = null; + $error_message = null; + try { + $result = $this->getConduit()->callMethodSynchronous( + $method, + $params); + } catch (ConduitClientException $ex) { + $error = $ex->getErrorCode(); + $error_message = $ex->getMessage(); + $result = null; + } + + echo json_encode(array( + 'error' => $error, + 'errorMessage' => $error_message, + 'response' => $result, + ))."\n"; + + return 0; + } +} diff --git a/src/workflow/call-conduit/__init__.php b/src/workflow/call-conduit/__init__.php new file mode 100644 index 00000000..b3a7b28d --- /dev/null +++ b/src/workflow/call-conduit/__init__.php @@ -0,0 +1,15 @@ +