Going forward we want all newly created source files to have an
SPDX-License-Identifier tag present.

Initially mandate this for C, Python, Perl, Shell source files,
as well as JSON (QAPI) and Makefiles, while encouraging users
to consider it for other file types.

The new attempt at detecting missing SPDX-License-Identifier relies
on the hooks for relying triggering logic at the end of scanning a
new file in the diff.

Tested-by: Cédric Le Goater <c...@redhat.com>
Reviewed-by: Cédric Le Goater <c...@redhat.com>
Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
---
 scripts/checkpatch.pl | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 6adef12871..87050e6677 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1482,6 +1482,20 @@ sub process_start_of_file {
 # Called at the end of processing a diff hunk for a file
 sub process_end_of_file {
        my $fileinfo = shift;
+
+       if ($fileinfo->{action} eq "new" &&
+           !exists $fileinfo->{facts}->{sawspdx}) {
+               if ($fileinfo->{filenew} =~
+                   /(\.(c|h|py|pl|sh|json|inc)|Makefile.*)$/) {
+                       # source code files MUST have SPDX license declared
+                       ERROR("New file '" . $fileinfo->{filenew} .
+                             "' requires 'SPDX-License-Identifier'");
+               } else {
+                       # Other files MAY have SPDX license if appropriate
+                       WARN("Does new file '" . $fileinfo->{filenew} .
+                            "' need 'SPDX-License-Identifier'?");
+               }
+       }
 }
 
 sub process {
@@ -1780,6 +1794,7 @@ sub process {
 
 # Check SPDX-License-Identifier references a permitted license
                if ($rawline =~ m,SPDX-License-Identifier: (.*?)(\*/)?\s*$,) {
+                       $fileinfo->{facts}->{sawspdx} = 1;
                        &checkspdx($realfile, $1);
                }
 
-- 
2.49.0


Reply via email to