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

Configure Feed

Select the types of activity you want to include in your feed.

checkpatch: always parse orig_commit in fixes tag

Do not require the presence of `$balanced_parens` to get the commit SHA;
this allows a `Fixes: deadbeef` tag to get a correct suggestion rather
than a suggestion containing a reference to HEAD.

Given this patch:

: From: Tamir Duberstein <tamird@gmail.com>
: Subject: Test patch
: Date: Fri, 25 Oct 2024 19:30:51 -0400
:
: This is a test patch.
:
: Fixes: bd17e036b495
: Signed-off-by: Tamir Duberstein <tamird@gmail.com>
: --- /dev/null
: +++ b/new-file
: @@ -0,0 +1 @@
: +Test.


Before:

WARNING: Please use correct Fixes: style 'Fixes: <12 chars of sha1> ("<title line>")' - ie: 'Fixes: c10a7d25e68f ("Test patch")'

After:

WARNING: Please use correct Fixes: style 'Fixes: <12 chars of sha1> ("<title line>")' - ie: 'Fixes: bd17e036b495 ("checkpatch: warn for non-standard fixes tag style")'



The prior behavior incorrectly suggested the patch's own SHA and title
line rather than the referenced commit's. This fixes that.

Ironically this:

Fixes: bd17e036b495 ("checkpatch: warn for non-standard fixes tag style")
Signed-off-by: Tamir Duberstein <tamird@gmail.com>
Cc: Andy Whitcroft <apw@canonical.com>
Cc: Dwaipayan Ray <dwaipayanray1@gmail.com>
Cc: Joe Perches <joe@perches.com>
Cc: Louis Peens <louis.peens@corigine.com>
Cc: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Cc: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Cc: Philippe Schenker <philippe.schenker@toradex.com>
Cc: Simon Horman <horms@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Tamir Duberstein and committed by
Andrew Morton
2f07b652 013a0705

+16 -21
+16 -21
scripts/checkpatch.pl
··· 3209 3209 3210 3210 # Check Fixes: styles is correct 3211 3211 if (!$in_header_lines && 3212 - $line =~ /^\s*fixes:?\s*(?:commit\s*)?[0-9a-f]{5,}\b/i) { 3213 - my $orig_commit = ""; 3214 - my $id = "0123456789ab"; 3215 - my $title = "commit title"; 3216 - my $tag_case = 1; 3217 - my $tag_space = 1; 3218 - my $id_length = 1; 3219 - my $id_case = 1; 3212 + $line =~ /^\s*(fixes:?)\s*(?:commit\s*)?([0-9a-f]{5,40})(?:\s*($balanced_parens))?/i) { 3213 + my $tag = $1; 3214 + my $orig_commit = $2; 3215 + my $title; 3220 3216 my $title_has_quotes = 0; 3221 3217 $fixes_tag = 1; 3222 - 3223 - if ($line =~ /(\s*fixes:?)\s+([0-9a-f]{5,})\s+($balanced_parens)/i) { 3224 - my $tag = $1; 3225 - $orig_commit = $2; 3226 - $title = $3; 3227 - 3228 - $tag_case = 0 if $tag eq "Fixes:"; 3229 - $tag_space = 0 if ($line =~ /^fixes:? [0-9a-f]{5,} ($balanced_parens)/i); 3230 - 3231 - $id_length = 0 if ($orig_commit =~ /^[0-9a-f]{12}$/i); 3232 - $id_case = 0 if ($orig_commit !~ /[A-F]/); 3233 - 3218 + if (defined $3) { 3234 3219 # Always strip leading/trailing parens then double quotes if existing 3235 - $title = substr($title, 1, -1); 3220 + $title = substr($3, 1, -1); 3236 3221 if ($title =~ /^".*"$/) { 3237 3222 $title = substr($title, 1, -1); 3238 3223 $title_has_quotes = 1; 3239 3224 } 3225 + } else { 3226 + $title = "commit title" 3240 3227 } 3241 3228 3229 + 3230 + my $tag_case = not ($tag eq "Fixes:"); 3231 + my $tag_space = not ($line =~ /^fixes:? [0-9a-f]{5,40} ($balanced_parens)/i); 3232 + 3233 + my $id_length = not ($orig_commit =~ /^[0-9a-f]{12}$/i); 3234 + my $id_case = not ($orig_commit !~ /[A-F]/); 3235 + 3236 + my $id = "0123456789ab"; 3242 3237 my ($cid, $ctitle) = git_commit_info($orig_commit, $id, 3243 3238 $title); 3244 3239