Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

checkpatch: warn for non-standard fixes tag style

Add a warning for fixes tags that does not follow community conventions.

Link: https://lkml.kernel.org/r/20220914100255.1048460-1-niklas.soderlund@corigine.com
Signed-off-by: Niklas Söderlund <niklas.soderlund@corigine.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Reviewed-by: Louis Peens <louis.peens@corigine.com>
Reviewed-by: Philippe Schenker <philippe.schenker@toradex.com>
Acked-by: Dwaipayan Ray <dwaipayanray1@gmail.com>
Reviewed-by: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Acked-by: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Acked-by: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Niklas Söderlund and committed by
Andrew Morton
bd17e036 462cd772

+51
+7
Documentation/dev-tools/checkpatch.rst
··· 612 612 613 613 See: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes 614 614 615 + **BAD_FIXES_TAG** 616 + The Fixes: tag is malformed or does not follow the community conventions. 617 + This can occur if the tag have been split into multiple lines (e.g., when 618 + pasted in an email program with word wrapping enabled). 619 + 620 + See: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes 621 + 615 622 616 623 Comparison style 617 624 ----------------
+44
scripts/checkpatch.pl
··· 3146 3146 } 3147 3147 } 3148 3148 3149 + # Check Fixes: styles is correct 3150 + if (!$in_header_lines && 3151 + $line =~ /^\s*fixes:?\s*(?:commit\s*)?[0-9a-f]{5,}\b/i) { 3152 + my $orig_commit = ""; 3153 + my $id = "0123456789ab"; 3154 + my $title = "commit title"; 3155 + my $tag_case = 1; 3156 + my $tag_space = 1; 3157 + my $id_length = 1; 3158 + my $id_case = 1; 3159 + my $title_has_quotes = 0; 3160 + 3161 + if ($line =~ /(\s*fixes:?)\s+([0-9a-f]{5,})\s+($balanced_parens)/i) { 3162 + my $tag = $1; 3163 + $orig_commit = $2; 3164 + $title = $3; 3165 + 3166 + $tag_case = 0 if $tag eq "Fixes:"; 3167 + $tag_space = 0 if ($line =~ /^fixes:? [0-9a-f]{5,} ($balanced_parens)/i); 3168 + 3169 + $id_length = 0 if ($orig_commit =~ /^[0-9a-f]{12}$/i); 3170 + $id_case = 0 if ($orig_commit !~ /[A-F]/); 3171 + 3172 + # Always strip leading/trailing parens then double quotes if existing 3173 + $title = substr($title, 1, -1); 3174 + if ($title =~ /^".*"$/) { 3175 + $title = substr($title, 1, -1); 3176 + $title_has_quotes = 1; 3177 + } 3178 + } 3179 + 3180 + my ($cid, $ctitle) = git_commit_info($orig_commit, $id, 3181 + $title); 3182 + 3183 + if ($ctitle ne $title || $tag_case || $tag_space || 3184 + $id_length || $id_case || !$title_has_quotes) { 3185 + if (WARN("BAD_FIXES_TAG", 3186 + "Please use correct Fixes: style 'Fixes: <12 chars of sha1> (\"<title line>\")' - ie: 'Fixes: $cid (\"$ctitle\")'\n" . $herecurr) && 3187 + $fix) { 3188 + $fixed[$fixlinenr] = "Fixes: $cid (\"$ctitle\")"; 3189 + } 3190 + } 3191 + } 3192 + 3149 3193 # Check email subject for common tools that don't need to be mentioned 3150 3194 if ($in_header_lines && 3151 3195 $line =~ /^Subject:.*\b(?:checkpatch|sparse|smatch)\b[^:]/i) {