]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: downgrade log level about style issues 27871/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 1 Jun 2023 01:10:00 +0000 (10:10 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Jun 2023 02:37:26 +0000 (11:37 +0900)
And add --no-style switch that make style issues not critical.

man/udevadm.xml
shell-completion/bash/udevadm
shell-completion/zsh/_udevadm
src/udev/udev-rules.c
src/udev/udevadm-verify.c
test/units/testsuite-17.11.sh

index a1c977341306d8a6d9ea6669d1c10e2c9c1be92e..900bdac4b3252d01896e17514ef4b612d2a84508 100644 (file)
           </listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><option>--no-style</option></term>
+          <listitem>
+            <para>Ignore style issues. When specified, even if style issues are found in udev rules files,
+            the exit status is <constant>0</constant> if no syntactic or semantic errors are found.</para>
+          </listitem>
+        </varlistentry>
+
         <xi:include href="standard-options.xml" xpointer="help" />
       </variablelist>
     </refsect2>
index 2e2fe5a58e88bb1ba94a2e6b0f4fb7907e82ff92..0606160c66b7f1c4aab4183cf13956c471d54498 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 --no-summary'
+        [VERIFY]='-N --resolve-names --root --no-summary --no-style'
         [WAIT]='-t --timeout --initialized=no --removed --settle'
         [LOCK]='-t --timeout -d --device -b --backing -p --print'
     )
index 96fb59af891404cb8432c2bf14f3e07f6ce62a44..37e9f28a584d8fb812d65ad75b3d51bc576e605a 100644 (file)
@@ -110,6 +110,7 @@ _udevadm_verify(){
         {-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.]' \
+        {--no-style}'[Ignore style issues.]' \
         {-h,--help}'[Print help text.]' \
         '*::files:_files'
 }
index 646d4829c118182059dcdcbe315c92cd34b038c8..6c1ac488e98605ef6e04e6675bbb851e9374d84e 100644 (file)
@@ -1091,26 +1091,26 @@ static void check_token_delimiters(UdevRuleLine *rule_line, const char *line) {
         if (line == rule_line->line) {
                 /* this is the first token of the rule */
                 if (n_comma > 0)
-                        log_line_warning(rule_line, "Stray leading comma.");
+                        log_line_notice(rule_line, "style: stray leading comma.");
         } else if (isempty(p)) {
                 /* there are no more tokens in the rule */
                 if (n_comma > 0)
-                        log_line_warning(rule_line, "Stray trailing comma.");
+                        log_line_notice(rule_line, "style: stray trailing comma.");
         } else {
                 /* single comma is expected */
                 if (n_comma == 0)
-                        log_line_warning(rule_line, "A comma between tokens is expected.");
+                        log_line_notice(rule_line, "style: a comma between tokens is expected.");
                 else if (n_comma > 1)
-                        log_line_warning(rule_line, "More than one comma between tokens.");
+                        log_line_notice(rule_line, "style: more than one comma between tokens.");
 
                 /* whitespace after comma is expected */
                 if (n_comma > 0) {
                         if (ws_before_comma)
-                                log_line_warning(rule_line, "Stray whitespace before comma.");
+                                log_line_notice(rule_line, "style: stray whitespace before comma.");
                         if (!ws_after_comma)
-                                log_line_warning(rule_line, "Whitespace after comma is expected.");
+                                log_line_notice(rule_line, "style: whitespace after comma is expected.");
                 } else if (!ws_before_comma && !ws_after_comma)
-                        log_line_warning(rule_line, "Whitespace between tokens is expected.");
+                        log_line_notice(rule_line, "style: whitespace between tokens is expected.");
         }
 }
 
@@ -1281,7 +1281,7 @@ static void rule_resolve_goto(UdevRuleFile *rule_file) {
                         line->goto_label = NULL;
 
                         if ((line->type & ~(LINE_HAS_LABEL|LINE_IS_REFERENCED)) == 0) {
-                                log_line_notice(line, "The line has no effect any more, dropping.");
+                                log_line_warning(line, "The line has no effect any more, dropping.");
                                 /* LINE_IS_REFERENCED implies LINE_HAS_LABEL */
                                 if (line->type & LINE_HAS_LABEL)
                                         udev_rule_line_clear_tokens(line);
@@ -1400,7 +1400,7 @@ static void udev_check_unused_labels(UdevRuleLine *line) {
 
         if (FLAGS_SET(line->type, LINE_HAS_LABEL) &&
             !FLAGS_SET(line->type, LINE_IS_REFERENCED))
-                log_line_warning(line, "LABEL=\"%s\" is unused.", line->label);
+                log_line_notice(line, "style: LABEL=\"%s\" is unused.", line->label);
 }
 
 static void udev_check_conflicts_duplicates(UdevRuleLine *line) {
index cf9ad67b0488477907f086ce0c3a4db8e4de5b3f..32202508f315c7f2a678d7cf839f0128d1efd67b 100644 (file)
@@ -21,6 +21,7 @@
 static ResolveNameTiming arg_resolve_name_timing = RESOLVE_NAME_EARLY;
 static char *arg_root = NULL;
 static bool arg_summary = true;
+static bool arg_style = true;
 
 STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
 
@@ -39,6 +40,7 @@ static int help(void) {
                "  -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"
+               "     --no-style                        Ignore style issues\n"
                "\nSee the %s for details.\n",
                program_invocation_short_name,
                ansi_highlight(),
@@ -52,6 +54,7 @@ static int parse_argv(int argc, char *argv[]) {
         enum {
                 ARG_ROOT = 0x100,
                 ARG_NO_SUMMARY,
+                ARG_NO_STYLE,
         };
         static const struct option options[] = {
                 { "help",          no_argument,       NULL, 'h'             },
@@ -59,6 +62,7 @@ static int parse_argv(int argc, char *argv[]) {
                 { "resolve-names", required_argument, NULL, 'N'             },
                 { "root",          required_argument, NULL, ARG_ROOT        },
                 { "no-summary",    no_argument,       NULL, ARG_NO_SUMMARY  },
+                { "no-style",      no_argument,       NULL, ARG_NO_STYLE    },
                 {}
         };
 
@@ -95,6 +99,10 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_summary = false;
                         break;
 
+                case ARG_NO_STYLE:
+                        arg_style = false;
+                        break;
+
                 case '?':
                         return -EINVAL;
                 default:
@@ -124,6 +132,10 @@ static int verify_rules_file(UdevRules *rules, const char *fname) {
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "%s: udev rules check failed.", fname);
 
+        if (arg_style && (issues & (1U << LOG_NOTICE)))
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+                                         "%s: udev rules have style issues.", fname);
+
         return 0;
 }
 
index 1ef6fa528fd4f7b914b744aa92240ae4af85e0a1..42b925f60b3c5463446bfd0170754c77c746d854 100755 (executable)
@@ -56,18 +56,21 @@ next_test_number() {
     out="sample-${num_str}.out"
 }
 
-assert_0() {
+assert_0_impl() {
     udevadm verify "$@" >"${out}"
     if [ -f "${exo}" ]; then
         diff -u "${exo}" "${out}"
     elif [ -f "${rules}" ]; then
         diff -u "${workdir}/default_output_1_success" "${out}"
     fi
+}
 
+assert_0() {
+    assert_0_impl "$@"
     next_test_number
 }
 
-assert_1() {
+assert_1_impl() {
     local rc
     set +e
     udevadm verify "$@" >"${out}" 2>"${err}"
@@ -84,7 +87,10 @@ assert_1() {
     elif [ -f "${rules}" ]; then
         diff -u "${workdir}/default_output_1_fail" "${out}"
     fi
+}
 
+assert_1() {
+    assert_1_impl "$@"
     next_test_number
 }
 
@@ -194,6 +200,22 @@ EOF
     assert_1 "${rules}"
 }
 
+test_style_error() {
+    local rule msg
+
+    rule="$1"; shift
+    msg="$1"; shift
+
+    printf '%s\n' "${rule}" >"${rules}"
+    cat >"${exp}" <<EOF
+${rules}:1 ${msg}
+${rules}: udev rules have style issues.
+EOF
+    assert_0_impl --no-style "${rules}"
+    assert_1_impl "${rules}"
+    next_test_number
+}
+
 test_syntax_error '=' 'Invalid key/value pair, ignoring.'
 test_syntax_error 'ACTION{a}=="b"' 'Invalid attribute for ACTION.'
 test_syntax_error 'ACTION:="b"' 'Invalid operator for ACTION.'
@@ -297,7 +319,7 @@ test_syntax_error 'GOTO="a", GOTO="b"
 LABEL="a"' 'Contains multiple GOTO keys, ignoring GOTO="b".'
 test_syntax_error 'LABEL{a}="b"' 'Invalid attribute for LABEL.'
 test_syntax_error 'LABEL=="b"' 'Invalid operator for LABEL.'
-test_syntax_error 'LABEL="b"' 'LABEL="b" is unused.'
+test_style_error 'LABEL="b"' 'style: LABEL="b" is unused.'
 test_syntax_error 'a="b"' "Invalid key 'a'."
 test_syntax_error 'KERNEL=="", KERNEL=="?*", NAME="a"' 'conflicting match expressions, the line has no effect.'
 test_syntax_error 'KERNEL=="abc", KERNEL!="abc", NAME="b"' 'conflicting match expressions, the line has no effect.'
@@ -313,18 +335,18 @@ test_syntax_error 'KERNEL=="|a|b", KERNEL=="b|a|", NAME="c"' 'duplicate expressi
 # shellcheck disable=SC2016
 test_syntax_error 'ENV{DISKSEQ}=="?*", ENV{DEVTYPE}!="partition", ENV{DISKSEQ}=="?*", ENV{ID_IGNORE_DISKSEQ}!="1", SYMLINK+="disk/by-diskseq/$env{DISKSEQ}"' \
                   'duplicate expressions.'
-test_syntax_error ',ACTION=="a", NAME="b"' 'Stray leading comma.'
-test_syntax_error ' ,ACTION=="a", NAME="b"' 'Stray leading comma.'
-test_syntax_error ', ACTION=="a", NAME="b"' 'Stray leading comma.'
-test_syntax_error 'ACTION=="a", NAME="b",' 'Stray trailing comma.'
-test_syntax_error 'ACTION=="a", NAME="b", ' 'Stray trailing comma.'
-test_syntax_error 'ACTION=="a" NAME="b"' 'A comma between tokens is expected.'
-test_syntax_error 'ACTION=="a",, NAME="b"' 'More than one comma between tokens.'
-test_syntax_error 'ACTION=="a" , NAME="b"' 'Stray whitespace before comma.'
-test_syntax_error 'ACTION=="a",NAME="b"' 'Whitespace after comma is expected.'
+test_style_error ',ACTION=="a", NAME="b"' 'style: stray leading comma.'
+test_style_error ' ,ACTION=="a", NAME="b"' 'style: stray leading comma.'
+test_style_error ', ACTION=="a", NAME="b"' 'style: stray leading comma.'
+test_style_error 'ACTION=="a", NAME="b",' 'style: stray trailing comma.'
+test_style_error 'ACTION=="a", NAME="b", ' 'style: stray trailing comma.'
+test_style_error 'ACTION=="a" NAME="b"' 'style: a comma between tokens is expected.'
+test_style_error 'ACTION=="a",, NAME="b"' 'style: more than one comma between tokens.'
+test_style_error 'ACTION=="a" , NAME="b"' 'style: stray whitespace before comma.'
+test_style_error 'ACTION=="a",NAME="b"' 'style: whitespace after comma is expected.'
 test_syntax_error 'RESULT=="a", PROGRAM="b"' 'Reordering RESULT check after PROGRAM assignment.'
 test_syntax_error 'RESULT=="a*", PROGRAM="b", RESULT=="*c", PROGRAM="d"' \
-        'Reordering RESULT check after PROGRAM assignment.'
+                  'Reordering RESULT check after PROGRAM assignment.'
 
 cat >"${rules}" <<'EOF'
 KERNEL=="a|b", KERNEL=="a|c", NAME="d"
@@ -357,10 +379,11 @@ LABEL="b"
 LABEL="b"
 EOF
 cat >"${exp}" <<EOF
-${rules}:3 LABEL="b" is unused.
-${rules}: udev rules check failed.
+${rules}:3 style: LABEL="b" is unused.
+${rules}: udev rules have style issues.
 EOF
-assert_1 "${rules}"
+assert_0_impl --no-style "${rules}"
+assert_1_impl "${rules}"
 
 cat >"${rules}" <<'EOF'
 GOTO="a"
@@ -370,7 +393,7 @@ cat >"${exp}" <<EOF
 ${rules}:2 Contains multiple LABEL keys, ignoring LABEL="a".
 ${rules}:1 GOTO="a" has no matching label, ignoring.
 ${rules}:1 The line has no effect any more, dropping.
-${rules}:2 LABEL="b" is unused.
+${rules}:2 style: LABEL="b" is unused.
 ${rules}: udev rules check failed.
 EOF
 assert_1 "${rules}"
@@ -389,21 +412,25 @@ cat >"${rules}" <<'EOF'
 ACTION=="a"NAME="b"
 EOF
 cat >"${exp}" <<EOF
-${rules}:1 A comma between tokens is expected.
-${rules}:1 Whitespace between tokens is expected.
-${rules}: udev rules check failed.
+${rules}:1 style: a comma between tokens is expected.
+${rules}:1 style: whitespace between tokens is expected.
+${rules}: udev rules have style issues.
 EOF
-assert_1 "${rules}"
+assert_0_impl --no-style "${rules}"
+assert_1_impl "${rules}"
+next_test_number
 
 cat >"${rules}" <<'EOF'
 ACTION=="a" ,NAME="b"
 EOF
 cat >"${exp}" <<EOF
-${rules}:1 Stray whitespace before comma.
-${rules}:1 Whitespace after comma is expected.
-${rules}: udev rules check failed.
+${rules}:1 style: stray whitespace before comma.
+${rules}:1 style: whitespace after comma is expected.
+${rules}: udev rules have style issues.
 EOF
-assert_1 "${rules}"
+assert_0_impl --no-style "${rules}"
+assert_1_impl "${rules}"
+next_test_number
 
 # udevadm verify --root
 sed "s|sample-[0-9]*.rules|${workdir}/${rules_dir}/&|" sample-*.exp >"${workdir}/${exp}"