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

Unified · Split

2 files
  1. Documentation/dev-tools/checkpatch.rst +7 −0
  2. scripts/checkpatch.pl +44 −0
Documentation/dev-tools/checkpatch.rst+7−0
@@ -612,6 +612,13 @@ Commit message · 611 unmodified lines
612612
613613 See: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes
614614
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+
615622
616623 Comparison style
617624 ----------------
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) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t