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();

Reply via email to