From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [PATCH 2/2] scripts/checkpatch: reimplement SPDX-License-Identifier detection
Date: Thu, 8 May 2025 18:01:00 +0100 [thread overview]
Message-ID: <20250508170100.876374-3-berrange@redhat.com> (raw)
In-Reply-To: <20250508170100.876374-1-berrange@redhat.com>
The new attempt at detecting missing SPDX-License-Identifier in
new files is using the following logic
* When seeing a line starting 'diff --git ...' it indicates
the start of a file in the patch. This must trigger reporting
of violations in the previous file (if any).
It must reset the validation state, since this may now be a
pre-existing file being changed. This will be resolved by
the next rule.
* When seeing a line starting 'new file mode...' it indicates
a newly created file and must enable SPDX validation.
* When seeing EOF, it must trigger reporting of violations in
the last new file in the patch, if any.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
scripts/checkpatch.pl | 56 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 54 insertions(+), 2 deletions(-)
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index d355c0dad5..5da0f85e08 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1353,7 +1353,22 @@ sub checkfilename {
}
}
-sub checkspdx {
+sub check_spdx_present {
+ my $expect_spdx_file = shift;
+
+ if ($expect_spdx_file =~
+ /\.(c|h|py|pl|sh|json|inc|Makefile)$/) {
+ # source code files MUST have SPDX license declared
+ ERROR("New file '$expect_spdx_file' requires " .
+ "'SPDX-License-Identifier'");
+ } else {
+ # Other files MAY have SPDX license if appropriate
+ WARN("Does new file '$expect_spdx_file' need " .
+ "'SPDX-License-Identifier'?");
+ }
+}
+
+sub check_spdx_expression {
my ($file, $expr) = @_;
# Imported Linux headers probably have SPDX tags, but if they
@@ -1442,6 +1457,8 @@ sub process {
my $in_imported_file = 0;
my $in_no_imported_file = 0;
my $non_utf8_charset = 0;
+ my $expect_spdx = 0;
+ my $expect_spdx_file;
our @report = ();
our $cnt_lines = 0;
@@ -1679,9 +1696,38 @@ sub process {
WARN("added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
}
+# All new files should have a SPDX-License-Identifier tag
+ if ($line =~ /^diff --git/) {
+ # Start of file diff marker, report last file if it failed
+ # SPDX validation
+ if (defined $expect_spdx_file) {
+ &check_spdx_present($expect_spdx_file);
+ }
+
+ # Reset state ready to find new file
+ $expect_spdx = 0;
+ $expect_spdx_file = undef;
+ } elsif ($line =~ /^new file mode\s*\d+\s*$/) {
+ # This diff block is a new file, so we must
+ # mandate a SPDX tag
+ $expect_spdx = 1;
+ } elsif ($expect_spdx) {
+ # Capture filename if don't already have it
+ $expect_spdx_file = $realfile unless
+ defined $expect_spdx_file;
+
+ # SPDX tags may occurr in comments which were
+ # stripped from '$line', so use '$rawline'. If
+ # we see one we pass validation
+ if ($rawline =~ /SPDX-License-Identifier/) {
+ $expect_spdx = 0;
+ $expect_spdx_file = undef;
+ }
+ }
+
# Check SPDX-License-Identifier references a permitted license
if ($rawline =~ m,SPDX-License-Identifier: (.*?)(\*/)?\s*$,) {
- &checkspdx($realfile, $1);
+ &check_spdx_expression($realfile, $1);
}
if ($rawline =~ m,(SPDX-[a-zA-Z0-9-_]+):,) {
@@ -3213,6 +3259,12 @@ sub process {
}
}
+ # End of diff, report last file block if it failed
+ # SPDX validation
+ if (defined $expect_spdx_file) {
+ &check_spdx_present($expect_spdx_file);
+ }
+
if ($is_patch && $chk_signoff && $signoff == 0) {
ERROR("Missing Signed-off-by: line(s)\n");
}
--
2.49.0
next prev parent reply other threads:[~2025-05-08 17:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-08 17:00 [PATCH 0/2] scripts/checkpatch: fix SPDX-License-Identifier detection Daniel P. Berrangé
2025-05-08 17:00 ` [PATCH 1/2] Revert "scripts: mandate that new files have SPDX-License-Identifier" Daniel P. Berrangé
2025-05-08 17:01 ` Daniel P. Berrangé [this message]
2025-05-09 13:01 ` [PATCH 2/2] scripts/checkpatch: reimplement SPDX-License-Identifier detection Peter Maydell
2025-05-09 14:17 ` Daniel P. Berrangé
2025-05-09 13:07 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250508170100.876374-3-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.