From 1fdead8c20dc8d8a2b4033cf54256d4667714eb9 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 6 May 2011 08:43:38 -0700 Subject: [PATCH] Provide 'arc call-conduit' to facilitate script integration with Phabricator Summary: Provide a formal mechanism for making conduit calls from other scripts. Test Plan: Called 'conduit.ping'. Reviewed By: jungejason Reviewers: aran, jungejason, tuomaspelkonen CC: aran, jungejason Differential Revision: 239 --- src/__phutil_library_map__.php | 2 + .../ArcanistCallConduitWorkflow.php | 87 +++++++++++++++++++ src/workflow/call-conduit/__init__.php | 15 ++++ 3 files changed, 104 insertions(+) create mode 100644 src/workflow/call-conduit/ArcanistCallConduitWorkflow.php create mode 100644 src/workflow/call-conduit/__init__.php 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 @@ +