History

checkpatch: warn for non-standard fixes tag style

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

Niklas Söderlund committed 4 years ago

Commit bd17e031 parent 462cd772 files · +51 −0Browse files

Showing the changes to scripts/checkpatch.pl (1 of 2 files). Show all

Unified · Split

scripts/checkpatch.pl+44−0
@@ -3146,6 +3146,50 @@ sub process { · 3145 unmodified lines
31463146 }
31473147 }
31483148
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+
31493193 # Check email subject for common tools that don't need to be mentioned
31503194 if ($in_header_lines &&
31513195 $line =~ /^Subject:.*\b(?:checkpatch|sparse|smatch)\b[^:]/i) {