mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
cli: help command now also prints usage
The help command now adds command usage to its output by calling each
command handler in CMD_USAGE mode.
Instead of seeing, for example:
decodepay
Decode {bolt11}, using {description} if necessary
we see:
decodepay bolt11 [description]
Decode {bolt11}, using {description} if necessary
Signed-off-by: Mark Beckwith <wythe@intrig.com>
This commit is contained in:
committed by
Christian Decker
parent
1a4f355a7b
commit
cbde3e20f7
@@ -62,7 +62,7 @@ static void json_help(struct command *cmd,
|
|||||||
static const struct json_command help_command = {
|
static const struct json_command help_command = {
|
||||||
"help",
|
"help",
|
||||||
json_help,
|
json_help,
|
||||||
"List available commands, or give verbose help on one command.",
|
"List available commands, or give verbose help on one {command}.",
|
||||||
|
|
||||||
.verbose = "help [command]\n"
|
.verbose = "help [command]\n"
|
||||||
"Without [command]:\n"
|
"Without [command]:\n"
|
||||||
@@ -196,7 +196,10 @@ static void json_help(struct command *cmd,
|
|||||||
struct json_result *response = new_json_result(cmd);
|
struct json_result *response = new_json_result(cmd);
|
||||||
struct json_command **cmdlist = get_cmdlist();
|
struct json_command **cmdlist = get_cmdlist();
|
||||||
const jsmntok_t *cmdtok;
|
const jsmntok_t *cmdtok;
|
||||||
|
char *usage;
|
||||||
|
|
||||||
|
/* FIXME: This is never called with a command parameter because lightning-cli
|
||||||
|
* attempts to launch the man page and then exits. */
|
||||||
if (!param(cmd, buffer, params,
|
if (!param(cmd, buffer, params,
|
||||||
p_opt("command", json_tok_tok, &cmdtok),
|
p_opt("command", json_tok_tok, &cmdtok),
|
||||||
NULL))
|
NULL))
|
||||||
@@ -231,11 +234,15 @@ static void json_help(struct command *cmd,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd->mode = CMD_USAGE;
|
||||||
json_array_start(response, "help");
|
json_array_start(response, "help");
|
||||||
for (i = 0; i < num_cmdlist; i++) {
|
for (i = 0; i < num_cmdlist; i++) {
|
||||||
|
cmdlist[i]->dispatch(cmd, NULL, NULL);
|
||||||
|
usage = tal_fmt(cmd, "%s %s", cmdlist[i]->name,
|
||||||
|
cmd->usage);
|
||||||
json_add_object(response,
|
json_add_object(response,
|
||||||
"command", JSMN_STRING,
|
"command", JSMN_STRING,
|
||||||
cmdlist[i]->name,
|
usage,
|
||||||
"description", JSMN_STRING,
|
"description", JSMN_STRING,
|
||||||
cmdlist[i]->description,
|
cmdlist[i]->description,
|
||||||
NULL);
|
NULL);
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ static bool param_arr(struct command *cmd, const char *buffer,
|
|||||||
{
|
{
|
||||||
#if DEVELOPER
|
#if DEVELOPER
|
||||||
if (!check_params(params)) {
|
if (!check_params(params)) {
|
||||||
command_fail(cmd, PARAM_DEV_ERROR, "developer error");
|
command_fail(cmd, PARAM_DEV_ERROR, "developer error: check_params");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -271,7 +271,8 @@ bool param(struct command *cmd, const char *buffer,
|
|||||||
param_cbx cbx = va_arg(ap, param_cbx);
|
param_cbx cbx = va_arg(ap, param_cbx);
|
||||||
void *arg = va_arg(ap, void *);
|
void *arg = va_arg(ap, void *);
|
||||||
if (!param_add(¶ms, name, required, cbx, arg)) {
|
if (!param_add(¶ms, name, required, cbx, arg)) {
|
||||||
command_fail(cmd, PARAM_DEV_ERROR, "developer error");
|
command_fail(cmd, PARAM_DEV_ERROR,
|
||||||
|
"developer error: param_add %s", name);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -622,7 +622,7 @@ def test_cli(node_factory):
|
|||||||
.format(l1.daemon.lightning_dir),
|
.format(l1.daemon.lightning_dir),
|
||||||
'help']).decode('utf-8')
|
'help']).decode('utf-8')
|
||||||
# Test some known output.
|
# Test some known output.
|
||||||
assert 'help\n List available commands, or give verbose help on one command' in out
|
assert 'help [command]\n List available commands, or give verbose help on one {command}' in out
|
||||||
|
|
||||||
# Test JSON output.
|
# Test JSON output.
|
||||||
out = subprocess.check_output(['cli/lightning-cli',
|
out = subprocess.check_output(['cli/lightning-cli',
|
||||||
|
|||||||
Reference in New Issue
Block a user