json: port various tools to the new JSON_FORMAT_OFF flag

These are the obvious cases.
This commit is contained in:
Lennart Poettering 2021-01-09 17:08:53 +01:00
parent b95a05d014
commit 6a01ea4a2f
3 changed files with 39 additions and 87 deletions

View File

@ -45,8 +45,7 @@ static const char *arg_source = NULL;
static const char *arg_target = NULL; static const char *arg_target = NULL;
static DissectImageFlags arg_flags = DISSECT_IMAGE_REQUIRE_ROOT|DISSECT_IMAGE_DISCARD_ON_LOOP|DISSECT_IMAGE_RELAX_VAR_CHECK|DISSECT_IMAGE_FSCK; static DissectImageFlags arg_flags = DISSECT_IMAGE_REQUIRE_ROOT|DISSECT_IMAGE_DISCARD_ON_LOOP|DISSECT_IMAGE_RELAX_VAR_CHECK|DISSECT_IMAGE_FSCK;
static VeritySettings arg_verity_settings = VERITY_SETTINGS_DEFAULT; static VeritySettings arg_verity_settings = VERITY_SETTINGS_DEFAULT;
static bool arg_json = false; static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
static JsonFormatFlags arg_json_format_flags = 0;
STATIC_DESTRUCTOR_REGISTER(arg_verity_settings, verity_settings_done); STATIC_DESTRUCTOR_REGISTER(arg_verity_settings, verity_settings_done);
@ -242,22 +241,9 @@ static int parse_argv(int argc, char *argv[]) {
break; break;
case ARG_JSON: case ARG_JSON:
if (streq(optarg, "pretty")) { r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
arg_json = true; if (r <= 0)
arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO; return r;
} else if (streq(optarg, "short")) {
arg_json = true;
arg_json_format_flags = JSON_FORMAT_NEWLINE;
} else if (streq(optarg, "off")) {
arg_json = false;
arg_json_format_flags = 0;
} else if (streq(optarg, "help")) {
puts("pretty\n"
"short\n"
"off");
return 0;
} else
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json=: %s", optarg);
break; break;
@ -353,17 +339,17 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
assert(m); assert(m);
assert(d); assert(d);
if (!arg_json) if (arg_json_format_flags & JSON_FORMAT_OFF)
printf(" Name: %s\n", basename(arg_image)); printf(" Name: %s\n", basename(arg_image));
if (ioctl(d->fd, BLKGETSIZE64, &size) < 0) if (ioctl(d->fd, BLKGETSIZE64, &size) < 0)
log_debug_errno(errno, "Failed to query size of loopback device: %m"); log_debug_errno(errno, "Failed to query size of loopback device: %m");
else if (!arg_json) { else if (arg_json_format_flags & JSON_FORMAT_OFF) {
char s[FORMAT_BYTES_MAX]; char s[FORMAT_BYTES_MAX];
printf(" Size: %s\n", format_bytes(s, sizeof(s), size)); printf(" Size: %s\n", format_bytes(s, sizeof(s), size));
} }
if (!arg_json) if (arg_json_format_flags & JSON_FORMAT_OFF)
putc('\n', stdout); putc('\n', stdout);
r = dissected_image_acquire_metadata(m); r = dissected_image_acquire_metadata(m);
@ -379,7 +365,7 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
log_warning_errno(r, "OS image is currently in use, proceeding without showing OS image metadata."); log_warning_errno(r, "OS image is currently in use, proceeding without showing OS image metadata.");
else if (r < 0) else if (r < 0)
return log_error_errno(r, "Failed to acquire image metadata: %m"); return log_error_errno(r, "Failed to acquire image metadata: %m");
else if (!arg_json) { else if (arg_json_format_flags & JSON_FORMAT_OFF) {
if (m->hostname) if (m->hostname)
printf(" Hostname: %s\n", m->hostname); printf(" Hostname: %s\n", m->hostname);
@ -495,7 +481,11 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
return table_log_add_error(r); return table_log_add_error(r);
} }
if (arg_json) { if (arg_json_format_flags & JSON_FORMAT_OFF) {
r = table_print(t, stdout);
if (r < 0)
return table_log_print_error(r);
} else {
_cleanup_(json_variant_unrefp) JsonVariant *jt = NULL; _cleanup_(json_variant_unrefp) JsonVariant *jt = NULL;
r = table_to_json(t, &jt); r = table_to_json(t, &jt);
@ -507,10 +497,6 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
return log_oom(); return log_oom();
json_variant_dump(v, arg_json_format_flags, stdout, NULL); json_variant_dump(v, arg_json_format_flags, stdout, NULL);
} else {
r = table_print(t, stdout);
if (r < 0)
return log_error_errno(r, "Failed to dump table: %m");
} }
return 0; return 0;

View File

@ -56,8 +56,7 @@ static uint64_t arg_disk_size_relative = UINT64_MAX;
static char **arg_pkcs11_token_uri = NULL; static char **arg_pkcs11_token_uri = NULL;
static char **arg_fido2_device = NULL; static char **arg_fido2_device = NULL;
static bool arg_recovery_key = false; static bool arg_recovery_key = false;
static bool arg_json = false; static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
static JsonFormatFlags arg_json_format_flags = 0;
static bool arg_and_resize = false; static bool arg_and_resize = false;
static bool arg_and_change_password = false; static bool arg_and_change_password = false;
static enum { static enum {
@ -171,22 +170,19 @@ static int list_homes(int argc, char *argv[], void *userdata) {
if (r < 0) if (r < 0)
return bus_log_parse_error(r); return bus_log_parse_error(r);
if (table_get_rows(table) > 1 || arg_json) { if (table_get_rows(table) > 1 || !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
r = table_set_sort(table, (size_t) 0, (size_t) -1); r = table_set_sort(table, (size_t) 0, (size_t) -1);
if (r < 0) if (r < 0)
return table_log_sort_error(r); return table_log_sort_error(r);
table_set_header(table, arg_legend); table_set_header(table, arg_legend);
if (arg_json) r = table_print_json(table, stdout, arg_json_format_flags);
r = table_print_json(table, stdout, arg_json_format_flags);
else
r = table_print(table, NULL);
if (r < 0) if (r < 0)
return table_log_print_error(r); return table_log_print_error(r);
} }
if (arg_legend && !arg_json) { if (arg_legend && (arg_json_format_flags & JSON_FORMAT_OFF)) {
if (table_get_rows(table) > 1) if (table_get_rows(table) > 1)
printf("\n%zu home areas listed.\n", table_get_rows(table) - 1); printf("\n%zu home areas listed.\n", table_get_rows(table) - 1);
else else
@ -462,7 +458,9 @@ static void dump_home_record(UserRecord *hr) {
log_warning("Warning: lacking rights to acquire privileged fields of user record of '%s', output incomplete.", hr->user_name); log_warning("Warning: lacking rights to acquire privileged fields of user record of '%s', output incomplete.", hr->user_name);
} }
if (arg_json) { if (arg_json_format_flags & JSON_FORMAT_OFF)
user_record_show(hr, true);
else {
_cleanup_(user_record_unrefp) UserRecord *stripped = NULL; _cleanup_(user_record_unrefp) UserRecord *stripped = NULL;
if (arg_export_format == EXPORT_FORMAT_STRIPPED) if (arg_export_format == EXPORT_FORMAT_STRIPPED)
@ -477,8 +475,7 @@ static void dump_home_record(UserRecord *hr) {
hr = stripped; hr = stripped;
json_variant_dump(hr->json, arg_json_format_flags, stdout, NULL); json_variant_dump(hr->json, arg_json_format_flags, stdout, NULL);
} else }
user_record_show(hr, true);
} }
static char **mangle_user_list(char **list, char ***ret_allocated) { static char **mangle_user_list(char **list, char ***ret_allocated) {
@ -3235,27 +3232,13 @@ static int parse_argv(int argc, char *argv[]) {
} }
case 'j': case 'j':
arg_json = true;
arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO; arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
break; break;
case ARG_JSON: case ARG_JSON:
if (streq(optarg, "pretty")) { r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
arg_json = true; if (r <= 0)
arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO; return r;
} else if (streq(optarg, "short")) {
arg_json = true;
arg_json_format_flags = JSON_FORMAT_NEWLINE;
} else if (streq(optarg, "off")) {
arg_json = false;
arg_json_format_flags = 0;
} else if (streq(optarg, "help")) {
puts("pretty\n"
"short\n"
"off");
return 0;
} else
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json=: %s", optarg);
break; break;
@ -3267,7 +3250,7 @@ static int parse_argv(int argc, char *argv[]) {
else else
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Specifying -E more than twice is not supported."); return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Specifying -E more than twice is not supported.");
arg_json = true; arg_json_format_flags &= ~JSON_FORMAT_OFF;
if (arg_json_format_flags == 0) if (arg_json_format_flags == 0)
arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO; arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
break; break;

View File

@ -106,8 +106,7 @@ static bool arg_randomize = false;
static int arg_pretty = -1; static int arg_pretty = -1;
static uint64_t arg_size = UINT64_MAX; static uint64_t arg_size = UINT64_MAX;
static bool arg_size_auto = false; static bool arg_size_auto = false;
static bool arg_json = false; static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
static JsonFormatFlags arg_json_format_flags = 0;
static void *arg_key = NULL; static void *arg_key = NULL;
static size_t arg_key_size = 0; static size_t arg_key_size = 0;
static char *arg_tpm2_device = NULL; static char *arg_tpm2_device = NULL;
@ -1824,7 +1823,7 @@ static int context_dump_partitions(Context *context, const char *node) {
Partition *p; Partition *p;
int r; int r;
if (!arg_json && context->n_partitions == 0) { if ((arg_json_format_flags & JSON_FORMAT_OFF) && context->n_partitions == 0) {
log_info("Empty partition table."); log_info("Empty partition table.");
return 0; return 0;
} }
@ -1834,12 +1833,12 @@ static int context_dump_partitions(Context *context, const char *node) {
return log_oom(); return log_oom();
if (!DEBUG_LOGGING) { if (!DEBUG_LOGGING) {
if (arg_json) if (arg_json_format_flags & JSON_FORMAT_OFF)
(void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
(size_t) 5, (size_t) 6, (size_t) 7, (size_t) 9, (size_t) 10, (size_t) 12, (size_t) -1);
else
(void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
(size_t) 8, (size_t) 11, (size_t) -1); (size_t) 8, (size_t) 11, (size_t) -1);
else
(void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
(size_t) 5, (size_t) 6, (size_t) 7, (size_t) 9, (size_t) 10, (size_t) 12, (size_t) -1);
} }
(void) table_set_align_percent(t, table_get_cell(t, 0, 4), 100); (void) table_set_align_percent(t, table_get_cell(t, 0, 4), 100);
@ -1893,7 +1892,7 @@ static int context_dump_partitions(Context *context, const char *node) {
return table_log_add_error(r); return table_log_add_error(r);
} }
if (!arg_json && (sum_padding > 0 || sum_size > 0)) { if ((arg_json_format_flags & JSON_FORMAT_OFF) && (sum_padding > 0 || sum_size > 0)) {
char s[FORMAT_BYTES_MAX]; char s[FORMAT_BYTES_MAX];
const char *a, *b; const char *a, *b;
@ -1919,12 +1918,9 @@ static int context_dump_partitions(Context *context, const char *node) {
return table_log_add_error(r); return table_log_add_error(r);
} }
if (arg_json) r = table_print_json(t, stdout, arg_json_format_flags);
r = table_print_json(t, stdout, arg_json_format_flags);
else
r = table_print(t, stdout);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to dump table: %m"); return table_log_print_error(r);
return 0; return 0;
} }
@ -3203,13 +3199,13 @@ static int context_write_partition_table(
if (arg_pretty > 0 || if (arg_pretty > 0 ||
(arg_pretty < 0 && isatty(STDOUT_FILENO) > 0) || (arg_pretty < 0 && isatty(STDOUT_FILENO) > 0) ||
arg_json) { !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
(void) context_dump_partitions(context, node); (void) context_dump_partitions(context, node);
putc('\n', stdout); putc('\n', stdout);
if (!arg_json) if (arg_json_format_flags & JSON_FORMAT_OFF)
(void) context_dump_partition_bar(context, node); (void) context_dump_partition_bar(context, node);
putc('\n', stdout); putc('\n', stdout);
fflush(stdout); fflush(stdout);
@ -3679,22 +3675,9 @@ static int parse_argv(int argc, char *argv[]) {
} }
case ARG_JSON: case ARG_JSON:
if (streq(optarg, "pretty")) { r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
arg_json = true; if (r <= 0)
arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO; return r;
} else if (streq(optarg, "short")) {
arg_json = true;
arg_json_format_flags = JSON_FORMAT_NEWLINE;
} else if (streq(optarg, "off")) {
arg_json = false;
arg_json_format_flags = 0;
} else if (streq(optarg, "help")) {
puts("pretty\n"
"short\n"
"off");
return 0;
} else
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json=: %s", optarg);
break; break;