On Thu, 2018-07-12 at 12:03 +0200, Geert Uytterhoeven wrote: > Print a warning if none of the Signed-off-by lines cover the patch > author. > > Non-ASCII quoted printable encoding in From: headers and (lack of) > double quotes are handled. > Split From: headers are not fully handled: only the first part is > compared. > > Signed-off-by: Geert Uytterhoeven <geert+rene...@glider.be>
Thanks Geert. Acked-by: Joe Perches <j...@perches.com> > --- > Tested using a set of ca. 4000 real world commits. > > Most common offenders are people using: > - different email addresses for author and Sob, > - different firstname/lastname order, or other different name > spelling, > - suse.de vs. suse.com. > > v3: > - Also print actual missing author, > - Match against "\s*" instead of single space, > > v2: > - Use "Encode" instead of "MIME::Words", as the former is a Perl core > module, > - Reduce level from error to warning, > --- > scripts/checkpatch.pl | 27 ++++++++++++++++++++++++--- > 1 file changed, 24 insertions(+), 3 deletions(-) > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > index 8d0bad190c25e2e0..d2fd6efe499525c3 100755 > --- a/scripts/checkpatch.pl > +++ b/scripts/checkpatch.pl > @@ -13,6 +13,7 @@ use POSIX; > use File::Basename; > use Cwd 'abs_path'; > use Term::ANSIColor qw(:constants); > +use Encode qw(decode encode); > > my $P = $0; > my $D = dirname(abs_path($P)); > @@ -2236,6 +2237,8 @@ sub process { > > our $clean = 1; > my $signoff = 0; > + my $author = ''; > + my $authorsignoff = 0; > my $is_patch = 0; > my $in_header_lines = $file ? 0 : 1; > my $in_commit_log = 0; #Scanning lines before patch > @@ -2518,10 +2521,23 @@ sub process { > } > } > > +# Check the patch for a From: > + if (decode("MIME-Header", $line) =~ /^From:\s*(.*)/) { > + $author = encode("utf8", $1); > + $author =~ s/"//g; > + } > + > # Check the patch for a signoff: > if ($line =~ /^\s*signed-off-by:/i) { > $signoff++; > $in_commit_log = 0; > + if ($author ne '') { > + my $l = $line; > + $l =~ s/"//g; > + if ($l =~ /^\s*signed-off-by:\s*\Q$author\E/i) { > + $authorsignoff = 1; > + } > + } > } > > # Check if MAINTAINERS is being updated. If so, there's probably no need to > @@ -6487,9 +6503,14 @@ sub process { > ERROR("NOT_UNIFIED_DIFF", > "Does not appear to be a unified-diff format patch\n"); > } > - if ($is_patch && $has_commit_log && $chk_signoff && $signoff == 0) { > - ERROR("MISSING_SIGN_OFF", > - "Missing Signed-off-by: line(s)\n"); > + if ($is_patch && $has_commit_log && $chk_signoff) { > + if ($signoff == 0) { > + ERROR("MISSING_SIGN_OFF", > + "Missing Signed-off-by: line(s)\n"); > + } elsif (!$authorsignoff) { > + WARN("NO_AUTHOR_SIGN_OFF", > + "Missing Signed-off-by: line by nominal patch > author '$author'\n"); > + } > } > > print report_dump();