mirror of
https://we.phorge.it/source/arcanist.git
synced 2025-02-03 18:38:26 +01:00
ef18ae08eb
Summary: Ref T5655. It is superfluous to include "base" in the name of an abstract base class. Furthermore, it is not done consistently within the code base. In order to retain compatibility with external code, I have kept the `ArcanistBaseWorkflow` class (which trivially extends from `ArcanistWorkflow`), but it is now deprecated and should output a warning message. Similarly for `ArcanistBaseUnitTestEngine`. Test Plan: Created a workflow which extends from `ArcanistBaseWorkflow`. Executed the workflow and saw a deprecation warning. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, Korvin, aurelijus Maniphest Tasks: T5655 Differential Revision: https://secure.phabricator.com/D9983
93 lines
2.3 KiB
PHP
93 lines
2.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Provides command-line access to the Conduit API.
|
|
*/
|
|
final class ArcanistCallConduitWorkflow extends ArcanistWorkflow {
|
|
|
|
public function getWorkflowName() {
|
|
return 'call-conduit';
|
|
}
|
|
|
|
public function getCommandSynopses() {
|
|
return phutil_console_format(<<<EOTEXT
|
|
**call-conduit** __method__
|
|
EOTEXT
|
|
);
|
|
}
|
|
|
|
public function getCommandHelp() {
|
|
return phutil_console_format(<<<EOTEXT
|
|
Supports: http, https
|
|
Allows you to make a raw Conduit method call:
|
|
|
|
- Run this command from a working directory.
|
|
- Call parameters are REQUIRED and read as a JSON blob from stdin.
|
|
- Results are written to stdout as a JSON blob.
|
|
|
|
This workflow is primarily useful for writing scripts which integrate
|
|
with Phabricator. Examples:
|
|
|
|
$ echo '{}' | arc call-conduit conduit.ping
|
|
$ echo '{"phid":"PHID-FILE-xxxx"}' | arc call-conduit file.download
|
|
EOTEXT
|
|
);
|
|
}
|
|
|
|
public function getArguments() {
|
|
return array(
|
|
'*' => 'method',
|
|
);
|
|
}
|
|
|
|
public function shouldShellComplete() {
|
|
return false;
|
|
}
|
|
|
|
public function requiresConduit() {
|
|
return true;
|
|
}
|
|
|
|
public function requiresAuthentication() {
|
|
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);
|
|
|
|
$console = PhutilConsole::getConsole();
|
|
$console->writeErr("%s\n", pht('Waiting for JSON parameters on stdin...'));
|
|
$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;
|
|
}
|
|
|
|
}
|