summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2024-01-11 16:35:18 +0100
committerLennart Poettering <lennart@poettering.net>2024-01-11 17:54:19 +0100
commita50666e376057a24b67f80c9a8025096c750fb23 (patch)
treef333abb19c25a4e6b11427373b41a63f68a5e114
parentnetwork: fix Name= -> OriginalName= in the default .link files (diff)
downloadsystemd-a50666e376057a24b67f80c9a8025096c750fb23.tar.xz
systemd-a50666e376057a24b67f80c9a8025096c750fb23.zip
id128: add --no-pager, --no-legend, --json=/-j switches to systemd-id128 tool
-rw-r--r--man/standard-options.xml7
-rw-r--r--man/systemd-id128.xml4
-rw-r--r--src/id128/id128.c42
-rwxr-xr-xtest/units/testsuite-74.id128.sh7
4 files changed, 56 insertions, 4 deletions
diff --git a/man/standard-options.xml b/man/standard-options.xml
index aec9a0d750..2813134828 100644
--- a/man/standard-options.xml
+++ b/man/standard-options.xml
@@ -93,6 +93,13 @@
off JSON output, the default).</para></listitem>
</varlistentry>
+ <varlistentry id='j'>
+ <term><option>-j</option></term>
+
+ <listitem><para>Equivalent to <option>--json=pretty</option> if running on a terminal, and
+ <option>--json=short</option> otherwise.</para></listitem>
+ </varlistentry>
+
<varlistentry id='signal'>
<term><option>-s</option></term>
<term><option>--signal=</option></term>
diff --git a/man/systemd-id128.xml b/man/systemd-id128.xml
index b1e6e24586..e23532d65d 100644
--- a/man/systemd-id128.xml
+++ b/man/systemd-id128.xml
@@ -144,6 +144,10 @@
<xi:include href="version-info.xml" xpointer="v244"/></listitem>
</varlistentry>
+ <xi:include href="standard-options.xml" xpointer="no-pager" />
+ <xi:include href="standard-options.xml" xpointer="no-legend" />
+ <xi:include href="standard-options.xml" xpointer="json" />
+ <xi:include href="standard-options.xml" xpointer="j" />
<xi:include href="standard-options.xml" xpointer="help" />
<xi:include href="standard-options.xml" xpointer="version" />
</variablelist>
diff --git a/src/id128/id128.c b/src/id128/id128.c
index d726ab7051..fa86cf666b 100644
--- a/src/id128/id128.c
+++ b/src/id128/id128.c
@@ -5,18 +5,22 @@
#include "alloc-util.h"
#include "build.h"
+#include "format-table.h"
#include "gpt.h"
#include "id128-print.h"
#include "main-func.h"
+#include "parse-argument.h"
#include "pretty-print.h"
#include "strv.h"
-#include "format-table.h"
#include "terminal-util.h"
#include "verbs.h"
static Id128PrettyPrintMode arg_mode = ID128_PRINT_ID128;
static sd_id128_t arg_app = {};
static bool arg_value = false;
+static PagerFlags arg_pager_flags = 0;
+static bool arg_legend = true;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
static int verb_new(int argc, char **argv, void *userdata) {
return id128_print_new(arg_mode);
@@ -150,9 +154,9 @@ static int verb_show(int argc, char **argv, void *userdata) {
}
if (table) {
- r = table_print(table, NULL);
+ r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
if (r < 0)
- return table_log_print_error(r);
+ return r;
}
return 0;
@@ -177,6 +181,12 @@ static int help(void) {
" help Show this help\n"
"\nOptions:\n"
" -h --help Show this help\n"
+ " --no-pager Do not pipe output into a pager\n"
+ " --no-legend Do not show the headers and footers\n"
+ " --json=FORMAT Output inspection data in JSON (takes one of\n"
+ " pretty, short, off)\n"
+ " -j Equivalent to --json=pretty (on TTY) or\n"
+ " --json=short (otherwise)\n"
" -p --pretty Generate samples of program code\n"
" -P --value Only print the value\n"
" -a --app-specific=ID Generate app-specific IDs\n"
@@ -197,11 +207,17 @@ static int verb_help(int argc, char **argv, void *userdata) {
static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
+ ARG_NO_PAGER,
+ ARG_NO_LEGEND,
+ ARG_JSON,
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
+ { "no-pager", no_argument, NULL, ARG_NO_PAGER },
+ { "no-legend", no_argument, NULL, ARG_NO_LEGEND },
+ { "json", required_argument, NULL, ARG_JSON },
{ "pretty", no_argument, NULL, 'p' },
{ "value", no_argument, NULL, 'P' },
{ "app-specific", required_argument, NULL, 'a' },
@@ -214,7 +230,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "hpa:uP", options, NULL)) >= 0)
+ while ((c = getopt_long(argc, argv, "hpa:uPj", options, NULL)) >= 0)
switch (c) {
case 'h':
@@ -223,6 +239,24 @@ static int parse_argv(int argc, char *argv[]) {
case ARG_VERSION:
return version();
+ case ARG_NO_PAGER:
+ arg_pager_flags |= PAGER_DISABLE;
+ break;
+
+ case ARG_NO_LEGEND:
+ arg_legend = false;
+ break;
+
+ case 'j':
+ arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
+ break;
+
+ case ARG_JSON:
+ r = parse_json_argument(optarg, &arg_json_format_flags);
+ if (r <= 0)
+ return r;
+
+ break;
case 'p':
arg_mode = ID128_PRINT_PRETTY;
arg_value = false;
diff --git a/test/units/testsuite-74.id128.sh b/test/units/testsuite-74.id128.sh
index c1b80d660e..f91cd5f78d 100755
--- a/test/units/testsuite-74.id128.sh
+++ b/test/units/testsuite-74.id128.sh
@@ -22,6 +22,13 @@ systemd-id128 show root-x86-64 --app-specific=4f68bce3e8cd4db196e7fbcaf984b709
systemd-id128 show --pretty root-x86-64 --app-specific=4f68bce3e8cd4db196e7fbcaf984b709
[[ "$(systemd-id128 show root-x86-64 --app-specific=4f68bce3e8cd4db196e7fbcaf984b709 -P)" = "8ee5535e7cb14c249e1d28b8dfbb939c" ]]
+systemd-id128 show -j
+systemd-id128 show --no-pager
+systemd-id128 show --json=short
+systemd-id128 show --no-legend
+systemd-id128 show --no-pager --no-legend
+systemd-id128 show root -P -u
+
[[ "$(systemd-id128 new | wc -c)" -eq 33 ]]
systemd-id128 new -p
systemd-id128 new -u