udevadm-control: use common verb help and add --introspect-cli

The custom help() is replaced by the common verb help, which derives the
synopsis, abstract, and option list from the verb declaration in
udevadm.c and the "udevadm-control" option namespace. The synopsis
is now "udevadm [OPTION…] control OPTION…".
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2026-08-28 09:29:04 +02:00
parent 96b091a6b4
commit da4f84ae4a
2 changed files with 21 additions and 36 deletions
+7 -22
View File
@@ -2,9 +2,9 @@
#include <string.h>
#include "sd-json.h"
#include "creds-util.h"
#include "format-table.h"
#include "help-util.h"
#include "log.h"
#include "options.h"
#include "parse-argument.h"
@@ -16,6 +16,7 @@
#include "udev-varlink.h"
#include "udevadm.h"
#include "varlink-util.h"
#include "verbs.h"
#include "virt.h"
static char **arg_env = NULL;
@@ -45,25 +46,6 @@ static bool arg_has_control_commands(void) {
arg_revert;
}
static int help(void) {
_cleanup_(table_unrefp) Table *options = NULL;
int r;
r = option_parser_get_help_table_ns("udevadm-control", &options);
if (r < 0)
return r;
help_cmdline("control OPTION");
help_abstract("Control the udev daemon.");
help_section("Options");
r = table_print_or_warn(options);
if (r < 0)
return r;
help_man_page_reference("udevadm", "8");
return 0;
}
static int parse_argv(int argc, char *argv[]) {
int r;
@@ -78,7 +60,7 @@ static int parse_argv(int argc, char *argv[]) {
OPTION_NAMESPACE("udevadm-control"): {}
OPTION_COMMON_HELP:
return help();
return command_print_verb_help("control");
OPTION('V', "version", NULL, "Show package version"):
return print_version();
@@ -155,6 +137,9 @@ static int parse_argv(int argc, char *argv[]) {
OPTION_LONG("load-credentials", NULL, "Load udev rules from credentials"):
arg_load_credentials = true;
break;
OPTION_COMMON_INTROSPECT_CLI:
return introspect_cli(SD_JSON_FORMAT_OFF);
}
if (!arg_has_control_commands() && !arg_load_credentials)
+14 -14
View File
@@ -26,21 +26,21 @@ COMMAND(
* subcommand parses its own options from the "udevadm-<verb>" namespace, see udevadm-*.c. */
VERB_COMMON_HELP_AUTO_PROGRAM("udevadm");
#define UDEVADM_VERB(fn, name, args, help) \
VERB_SCOPE_NS(, fn, name, "udevadm-" name, args, VERB_ANY, VERB_ANY, 0, help)
#define UDEVADM_VERB(fn, name, args, flags, help, footer) \
VERB_SCOPE_NS_FULL(, fn, name, "udevadm-" name, args, VERB_ANY, VERB_ANY, flags, /* dat= */ 0, help, footer)
UDEVADM_VERB(verb_info_main, "info", "[DEVPATH|FILE]\0", "Query sysfs or the udev database");
UDEVADM_VERB(verb_trigger_main, "trigger", "DEVPATH\0", "Request events from the kernel");
UDEVADM_VERB(verb_settle_main, "settle", NULL, "Wait for pending udev events");
UDEVADM_VERB(verb_control_main, "control", "OPTION\0", "Control the udev daemon");
UDEVADM_VERB(verb_monitor_main, "monitor", NULL, "Listen to kernel and udev events");
UDEVADM_VERB(verb_test_main, "test", "DEVPATH\0", "Test an event run");
UDEVADM_VERB(verb_builtin_main, "test-builtin", "COMMAND DEVPATH\0", "Test a built-in command");
UDEVADM_VERB(verb_verify_main, "verify", "[FILE…]\0", "Verify udev rules files");
UDEVADM_VERB(verb_cat_main, "cat", "[FILE…]\0", "Show udev rules files");
UDEVADM_VERB(verb_wait_main, "wait", "DEVICE [DEVICE…]\0", "Wait for device or device symlink");
UDEVADM_VERB(verb_lock_main, "lock", "COMMAND\0", "Lock a block device");
UDEVADM_VERB(verb_hwdb_main, "hwdb", NULL, /* help= */ NULL); /* deprecated */
UDEVADM_VERB(verb_info_main, "info", "[DEVPATH|FILE]\0", 0, "Query sysfs or the udev database", NULL);
UDEVADM_VERB(verb_trigger_main, "trigger", "DEVPATH\0", 0, "Request events from the kernel", NULL);
UDEVADM_VERB(verb_settle_main, "settle", NULL, 0, "Wait for pending udev events", NULL);
UDEVADM_VERB(verb_control_main, "control", NULL, VERB_OPTION_REQUIRED, "Control the udev daemon", NULL);
UDEVADM_VERB(verb_monitor_main, "monitor", NULL, 0, "Listen to kernel and udev events", NULL);
UDEVADM_VERB(verb_test_main, "test", "DEVPATH\0", 0, "Test an event run", NULL);
UDEVADM_VERB(verb_builtin_main, "test-builtin", "COMMAND DEVPATH\0", 0, "Test a built-in command", NULL);
UDEVADM_VERB(verb_verify_main, "verify", "[FILE…]\0", 0, "Verify udev rules files", NULL);
UDEVADM_VERB(verb_cat_main, "cat", "[FILE…]\0", 0, "Show udev rules files", NULL);
UDEVADM_VERB(verb_wait_main, "wait", "DEVICE [DEVICE…]\0", 0, "Wait for device or device symlink", NULL);
UDEVADM_VERB(verb_lock_main, "lock", "COMMAND", 0, "Lock a block device", NULL);
UDEVADM_VERB(verb_hwdb_main, "hwdb", NULL, 0, /* help= */ NULL, NULL); /* deprecated */
VERB_NOARG(verb_version_main, "version", /* help= */ NULL);
static int verb_version_main(int argc, char *argv[], uintptr_t _data, void *userdata) {