On Wed, Dec 20, 2017 at 10:28:48PM -0800, Joe Perches wrote:
> On Wed, 2017-12-20 at 17:46 -0600, Rob Herring wrote:
> > Add SPDX license tag check based on the rules defined in
> > Documentation/process/license-rules.rst. To summarize, SPDX license tags
> > should be on the 1st line (or 2nd line in scripts) using the appropriate
> > comment style for the file type.
> > 
> > Cc: Andy Whitcroft <a...@canonical.com>
> > Cc: Joe Perches <j...@perches.com>
> > Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
> > Cc: Thomas Gleixner <t...@linutronix.de>
> > Cc: Philippe Ombredanne <pombreda...@nexb.com>
> > Signed-off-by: Rob Herring <r...@kernel.org>
> > ---
> > Thomas, if you are inclined and Joe is happy with this, can you add this 
> > on top of your series adding license-rules.rst.
> > 
> > v4:
> > - Reference license-rules.rst
> > - Add comment style checks based on file types
> > - Check .rst files
> > 
> > v3:
> > - Since we specify that the tag goes on the 1st or 2nd line, the logic
> >   can be greatly simplified compared to v2 because we can just use the
> >   line number. And now the check is improved too.
> > 
> >  scripts/checkpatch.pl | 25 +++++++++++++++++++++++++
> >  1 file changed, 25 insertions(+)
> > 
> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> []
> > @@ -2866,6 +2866,31 @@ sub process {
> >                     }
> >             }
> >  
> > +# check for using SPDX license tag at beginning of files
> > +           if ($rawline =~ /^\+/ && !($realline == 1 && $rawline =~ 
> > /^[\s\+]#!/)) {
> 
> This test will enter this block for every added line of the patch.
> 
> Needs to be /^[ \+]/ and not [\t\+] and probably should just be ^\+
> 
> I'd probably have something like
>       my $checklicenseline = 1;
>       
> at the start of sub process
> 
> and use something
> 
>               if ($realline == $checklicenseline) {
>                       if ($realfile =~ /\.(?:sh|pl|py)/ && $rawline =~ /\[ 
> \+]\s*\!\#/) {
>                               $checklicenseline = 2;
>                       } elsif (etc...) {
>                       }
>               }

Okay, here's what I've ended up with:

                if ($realline == $checklicenseline) {
                        if ($realfile =~ /\.(?:sh|pl|py)/ && $rawline =~ /\[ 
\+]\s*\!\#/) {
                                $checklicenseline = 2;
                        } elsif ($rawline =~ /^\+/) {
                                my $comment = "";
                                if ($realfile =~ /\.(h|s|S)$/) {
                                        $comment = '/\*';
                                } elsif ($realfile =~ /\.(c|dts|dtsi)$/) {
                                        $comment = '//';
                                } elsif ($realfile =~ /\.(sh|pl|py)$/) {
                                        $comment = '#';
                                } elsif ($realfile =~ /\.rst$/) {
                                        $comment = '\.\.';
                                }

                                if ($comment !~ /^$/ &&
                                    $rawline !~ m@^\+$comment 
SPDX-License-Identifier: @) {
                                        WARN("SPDX_LICENSE_TAG",
                                             "Missing or malformed 
SPDX-License-Identifier tag in 1st (or 2nd for scripts) line\n" . 
$herecurr);
                                }
                        }
                }


> 
> > +                   } elsif ($realfile =~ /\.rst$/) {
> > +                           $comment = '..';
> 
> \.\.
> 
> What about .txt, .json, .cocci, and .awk ?

What about them? They aren't documented in license-rules.rst and I'm 
just implementing what's documented as you said I should on v3.

Rob

Reply via email to