From 9e36da1541f3ff204290547ce1da0a18b0df75b8 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 16 May 2023 08:00:00 +0000 Subject: [PATCH] udevadm-verify: introduce --no-summary option When udevadm verify is invoked by an analyzer tool like rpminspect to verify individual udev rules files, the summary just clutters the output, so provide an option to turn the summary off. --- man/udevadm.xml | 7 +++++++ shell-completion/bash/udevadm | 2 +- shell-completion/zsh/_udevadm | 1 + src/udev/udevadm-verify.c | 36 +++++++++++++++++++++-------------- test/units/testsuite-17.11.sh | 2 ++ 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/man/udevadm.xml b/man/udevadm.xml index 734e38cd051..1e2202aa66d 100644 --- a/man/udevadm.xml +++ b/man/udevadm.xml @@ -780,6 +780,13 @@ + + + + Do not show summary. + + + diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm index 3c3c403153b..2e2fe5a58e8 100644 --- a/shell-completion/bash/udevadm +++ b/shell-completion/bash/udevadm @@ -64,7 +64,7 @@ _udevadm() { [MONITOR_ARG]='-s --subsystem-match -t --tag-match' [TEST]='-a --action -N --resolve-names' [TEST_BUILTIN]='-a --action' - [VERIFY]='-N --resolve-names --root' + [VERIFY]='-N --resolve-names --root --no-summary' [WAIT]='-t --timeout --initialized=no --removed --settle' [LOCK]='-t --timeout -d --device -b --backing -p --print' ) diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm index e8414eef679..96fb59af891 100644 --- a/shell-completion/zsh/_udevadm +++ b/shell-completion/zsh/_udevadm @@ -109,6 +109,7 @@ _udevadm_verify(){ _arguments \ {-N+,--resolve-names=}'[When to resolve names.]:resolve:(early never)' \ '--root=[Operate on catalog hierarchy under specified directory]:directories:_directories' \ + {--no-summary}'[Do not show summary.]' \ {-h,--help}'[Print help text.]' \ '*::files:_files' } diff --git a/src/udev/udevadm-verify.c b/src/udev/udevadm-verify.c index 37c477da6a5..58d35fef133 100644 --- a/src/udev/udevadm-verify.c +++ b/src/udev/udevadm-verify.c @@ -20,6 +20,7 @@ static ResolveNameTiming arg_resolve_name_timing = RESOLVE_NAME_EARLY; static char *arg_root = NULL; +static bool arg_summary = true; STATIC_DESTRUCTOR_REGISTER(arg_root, freep); @@ -37,6 +38,7 @@ static int help(void) { " -V --version Show package version\n" " -N --resolve-names=early|never When to resolve names\n" " --root=PATH Operate on an alternate filesystem root\n" + " --no-summary Do not show summary\n" "\nSee the %s for details.\n", program_invocation_short_name, ansi_highlight(), @@ -49,12 +51,14 @@ static int help(void) { static int parse_argv(int argc, char *argv[]) { enum { ARG_ROOT = 0x100, + ARG_NO_SUMMARY, }; static const struct option options[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, 'V' }, - { "resolve-names", required_argument, NULL, 'N' }, - { "root", required_argument, NULL, ARG_ROOT }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'V' }, + { "resolve-names", required_argument, NULL, 'N' }, + { "root", required_argument, NULL, ARG_ROOT }, + { "no-summary", no_argument, NULL, ARG_NO_SUMMARY }, {} }; @@ -87,6 +91,9 @@ static int parse_argv(int argc, char *argv[]) { if (r < 0) return r; break; + case ARG_NO_SUMMARY: + arg_summary = false; + break; case '?': return -EINVAL; @@ -172,16 +179,17 @@ static int verify_rules(UdevRules *rules, char **files) { r = verify_rules_filelist(rules, files, &fail_count, &success_count, /* walk_dirs */ true); - printf("\n%s%zu udev rules files have been checked.%s\n" - " Success: %zu\n" - "%s Fail: %zu%s\n", - ansi_highlight(), - fail_count + success_count, - ansi_normal(), - success_count, - fail_count > 0 ? ansi_highlight_red() : "", - fail_count, - fail_count > 0 ? ansi_normal() : ""); + if (arg_summary) + printf("\n%s%zu udev rules files have been checked.%s\n" + " Success: %zu\n" + "%s Fail: %zu%s\n", + ansi_highlight(), + fail_count + success_count, + ansi_normal(), + success_count, + fail_count > 0 ? ansi_highlight_red() : "", + fail_count, + fail_count > 0 ? ansi_normal() : ""); return r; } diff --git a/test/units/testsuite-17.11.sh b/test/units/testsuite-17.11.sh index d70a93b74f1..56e9ac24ac9 100755 --- a/test/units/testsuite-17.11.sh +++ b/test/units/testsuite-17.11.sh @@ -134,6 +134,8 @@ rm "${rules_dir}/loop.rules" # Empty rules. touch "${rules_dir}/empty.rules" assert_0 --root="${workdir}" +: >"${exo}" +assert_0 --root="${workdir}" --no-summary # Directory with a single *.rules file. cp "${workdir}/default_output_1_success" "${exo}" -- 2.47.3