]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm-verify: introduce --no-summary option
authorDmitry V. Levin <ldv@strace.io>
Tue, 16 May 2023 08:00:00 +0000 (08:00 +0000)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 21 May 2023 14:20:30 +0000 (23:20 +0900)
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
shell-completion/bash/udevadm
shell-completion/zsh/_udevadm
src/udev/udevadm-verify.c
test/units/testsuite-17.11.sh

index 734e38cd05108c8fa61ef35bebd124917d1923e7..1e2202aa66d6ec9501c172df83681569c0b72457 100644 (file)
           </listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><option>--no-summary</option></term>
+          <listitem>
+            <para>Do not show summary.</para>
+          </listitem>
+        </varlistentry>
+
         <xi:include href="standard-options.xml" xpointer="help" />
       </variablelist>
     </refsect2>
index 3c3c403153b821ba08922d0657191fa69accbc36..2e2fe5a58e88bb1ba94a2e6b0f4fb7907e82ff92 100644 (file)
@@ -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'
     )
index e8414eef679378bc66912dfe58ab0c2597d006a5..96fb59af891404cb8432c2bf14f3e07f6ce62a44 100644 (file)
@@ -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'
 }
index 37c477da6a5c2f4ea96921d852bff6cfae2c499e..58d35fef13392753e83124e0de6b404440576088 100644 (file)
@@ -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;
 }
index d70a93b74f10381bcf6c1be351a67b5145e6367a..56e9ac24ac9cf24f9b01b85abd8b484ff8208522 100755 (executable)
@@ -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}"