mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 06:41:44 +01:00
lightning-cli: do pretty-printing.
Plugins don't do it right anyway, and we're about to remove it from lightningd. Produces same format as json_pp. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
465065691f
commit
5009d628a3
5 changed files with 88 additions and 8 deletions
|
@ -114,7 +114,8 @@ static void human_help(const char *buffer, const jsmntok_t *result, bool has_com
|
||||||
enum format {
|
enum format {
|
||||||
JSON,
|
JSON,
|
||||||
HUMAN,
|
HUMAN,
|
||||||
DEFAULT_FORMAT
|
DEFAULT_FORMAT,
|
||||||
|
RAW
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *opt_set_human(enum format *format)
|
static char *opt_set_human(enum format *format)
|
||||||
|
@ -129,6 +130,12 @@ static char *opt_set_json(enum format *format)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *opt_set_raw(enum format *format)
|
||||||
|
{
|
||||||
|
*format = RAW;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
enum input {
|
enum input {
|
||||||
KEYWORDS,
|
KEYWORDS,
|
||||||
ORDERED,
|
ORDERED,
|
||||||
|
@ -202,6 +209,61 @@ try_exec_man (const char *page, char *relative_to) {
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void print_json(const char *str, const jsmntok_t *tok, const char *indent)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
const jsmntok_t *t;
|
||||||
|
bool first;
|
||||||
|
char next_indent[strlen(indent) + 3 + 1];
|
||||||
|
|
||||||
|
memset(next_indent, ' ', sizeof(next_indent)-1);
|
||||||
|
next_indent[sizeof(next_indent)-1] = '\0';
|
||||||
|
|
||||||
|
switch (tok->type) {
|
||||||
|
case JSMN_PRIMITIVE:
|
||||||
|
case JSMN_STRING:
|
||||||
|
printf("%.*s", json_tok_full_len(tok), json_tok_full(str, tok));
|
||||||
|
return;
|
||||||
|
|
||||||
|
case JSMN_ARRAY:
|
||||||
|
first = true;
|
||||||
|
json_for_each_arr(i, t, tok) {
|
||||||
|
if (first)
|
||||||
|
printf("[\n%s", next_indent);
|
||||||
|
else
|
||||||
|
printf(",\n%s", next_indent);
|
||||||
|
print_json(str, t, next_indent);
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
if (first)
|
||||||
|
printf("[]");
|
||||||
|
else
|
||||||
|
printf("\n%s]", indent);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case JSMN_OBJECT:
|
||||||
|
first = true;
|
||||||
|
json_for_each_obj(i, t, tok) {
|
||||||
|
if (first)
|
||||||
|
printf("{\n%s", next_indent);
|
||||||
|
else
|
||||||
|
printf(",\n%s", next_indent);
|
||||||
|
print_json(str, t, next_indent);
|
||||||
|
printf(" : ");
|
||||||
|
print_json(str, t + 1, next_indent);
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
if (first)
|
||||||
|
printf("{}");
|
||||||
|
else
|
||||||
|
printf("\n%s}", indent);
|
||||||
|
return;
|
||||||
|
case JSMN_UNDEFINED:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
setup_locale();
|
setup_locale();
|
||||||
|
@ -232,6 +294,8 @@ int main(int argc, char *argv[])
|
||||||
"Human-readable output (default for 'help')");
|
"Human-readable output (default for 'help')");
|
||||||
opt_register_noarg("-J|--json", opt_set_json, &format,
|
opt_register_noarg("-J|--json", opt_set_json, &format,
|
||||||
"JSON output (default unless 'help')");
|
"JSON output (default unless 'help')");
|
||||||
|
opt_register_noarg("-R|--raw", opt_set_raw, &format,
|
||||||
|
"Raw, unformatted JSON output");
|
||||||
opt_register_noarg("-k|--keywords", opt_set_keywords, &input,
|
opt_register_noarg("-k|--keywords", opt_set_keywords, &input,
|
||||||
"Use format key=value for <params>");
|
"Use format key=value for <params>");
|
||||||
opt_register_noarg("-o|--order", opt_set_ordered, &input,
|
opt_register_noarg("-o|--order", opt_set_ordered, &input,
|
||||||
|
@ -387,10 +451,14 @@ int main(int argc, char *argv[])
|
||||||
human_help(resp, result, false);
|
human_help(resp, result, false);
|
||||||
else
|
else
|
||||||
human_readable(resp, result, '\n');
|
human_readable(resp, result, '\n');
|
||||||
else
|
else if (format == RAW)
|
||||||
printf("%.*s\n",
|
printf("%.*s\n",
|
||||||
json_tok_full_len(result),
|
json_tok_full_len(result),
|
||||||
json_tok_full(resp, result));
|
json_tok_full(resp, result));
|
||||||
|
else {
|
||||||
|
print_json(resp, result, "");
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
tal_free(lightning_dir);
|
tal_free(lightning_dir);
|
||||||
tal_free(rpc_filename);
|
tal_free(rpc_filename);
|
||||||
tal_free(ctx);
|
tal_free(ctx);
|
||||||
|
@ -398,8 +466,13 @@ int main(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (format == RAW)
|
||||||
printf("%.*s\n",
|
printf("%.*s\n",
|
||||||
json_tok_full_len(error), json_tok_full(resp, error));
|
json_tok_full_len(error), json_tok_full(resp, error));
|
||||||
|
else {
|
||||||
|
print_json(resp, error, "");
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
tal_free(lightning_dir);
|
tal_free(lightning_dir);
|
||||||
tal_free(rpc_filename);
|
tal_free(rpc_filename);
|
||||||
tal_free(ctx);
|
tal_free(ctx);
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
.\" Title: lightning-cli
|
.\" Title: lightning-cli
|
||||||
.\" Author: [see the "AUTHOR" section]
|
.\" Author: [see the "AUTHOR" section]
|
||||||
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
|
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
|
||||||
.\" Date: 02/11/2018
|
.\" Date: 04/02/2019
|
||||||
.\" Manual: \ \&
|
.\" Manual: \ \&
|
||||||
.\" Source: \ \&
|
.\" Source: \ \&
|
||||||
.\" Language: English
|
.\" Language: English
|
||||||
.\"
|
.\"
|
||||||
.TH "LIGHTNING\-CLI" "1" "02/11/2018" "\ \&" "\ \&"
|
.TH "LIGHTNING\-CLI" "1" "04/02/2019" "\ \&" "\ \&"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * Define some portability stuff
|
.\" * Define some portability stuff
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -69,6 +69,11 @@ Return result in JSON format (default unless
|
||||||
command)
|
command)
|
||||||
.RE
|
.RE
|
||||||
.PP
|
.PP
|
||||||
|
\fB\-\-raw\fR/\fB\-R\fR
|
||||||
|
.RS 4
|
||||||
|
Return raw JSON directly as lightningd replies
|
||||||
|
.RE
|
||||||
|
.PP
|
||||||
\fB\-\-human\-readable\fR/\fB\-H\fR
|
\fB\-\-human\-readable\fR/\fB\-H\fR
|
||||||
.RS 4
|
.RS 4
|
||||||
Return result in human\-readable output (default for
|
Return result in human\-readable output (default for
|
||||||
|
|
|
@ -29,6 +29,8 @@ OPTIONS
|
||||||
Follow strictly the order of parameters for the command
|
Follow strictly the order of parameters for the command
|
||||||
*--json*/*-J*::
|
*--json*/*-J*::
|
||||||
Return result in JSON format (default unless 'help' command)
|
Return result in JSON format (default unless 'help' command)
|
||||||
|
*--raw*/*-R*::
|
||||||
|
Return raw JSON directly as lightningd replies
|
||||||
*--human-readable*/*-H*::
|
*--human-readable*/*-H*::
|
||||||
Return result in human-readable output (default for 'help' command)
|
Return result in human-readable output (default for 'help' command)
|
||||||
*--help*/*-h*::
|
*--help*/*-h*::
|
||||||
|
|
|
@ -232,4 +232,4 @@ def test_utf8_passthrough(node_factory, executor):
|
||||||
.format(l1.daemon.lightning_dir),
|
.format(l1.daemon.lightning_dir),
|
||||||
'utf8', 'ナンセンス 1杯']).decode('utf-8')
|
'utf8', 'ナンセンス 1杯']).decode('utf-8')
|
||||||
assert '\\u' not in out
|
assert '\\u' not in out
|
||||||
assert out == '{"utf8": "ナンセンス 1杯"}\n'
|
assert out == '{\n "utf8" : "ナンセンス 1杯"\n}\n'
|
||||||
|
|
|
@ -76,7 +76,7 @@ if ! bitcoin-cli -regtest ping >/dev/null 2>&1; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LIGHTNINGD="./lightningd/lightningd --network=regtest --dev-gossip-time=1550513768 --dev-unknown-channel-satoshis=100000"
|
LIGHTNINGD="./lightningd/lightningd --network=regtest --dev-gossip-time=1550513768 --dev-unknown-channel-satoshis=100000"
|
||||||
LCLI1="./cli/lightning-cli --lightning-dir=$DIR"
|
LCLI1="./cli/lightning-cli --lightning-dir=$DIR -R"
|
||||||
|
|
||||||
if [ -z "$DIR" ]; then
|
if [ -z "$DIR" ]; then
|
||||||
trap 'rm -rf "$DIR"' 0
|
trap 'rm -rf "$DIR"' 0
|
||||||
|
|
Loading…
Add table
Reference in a new issue