diff mbox series

[RFC] checkpatch: detect missing changes to trace-events

Message ID 20200806153331.23907-1-cfontana@suse.de (mailing list archive)
State New, archived
Headers show
Series [RFC] checkpatch: detect missing changes to trace-events | expand

Commit Message

Claudio Fontana Aug. 6, 2020, 3:33 p.m. UTC
Signed-off-by: Claudio Fontana <cfontana@suse.de>
---
 scripts/checkpatch.pl | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

We could do something similar to MAINTAINERS for trace-events,
ie warning about files added, moved, deleted if we don't see
an update to a trace-events file.

To make it more solid it would be better to check the
actual file contents for #include "trace.h" or "trace-root.h",
but I guess this is not possible/practice from checkpatch?

If we could only warn for files moved that actually include
trace.h or trace-root.h, we could avoid a lot of false positives.

Thanks,

Claudio

Comments

Markus Armbruster Aug. 7, 2020, 6:21 a.m. UTC | #1
Claudio Fontana <cfontana@suse.de> writes:

> Signed-off-by: Claudio Fontana <cfontana@suse.de>
> ---
>  scripts/checkpatch.pl | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
>
> We could do something similar to MAINTAINERS for trace-events,
> ie warning about files added, moved, deleted if we don't see
> an update to a trace-events file.

I like the idea, but...

> To make it more solid it would be better to check the
> actual file contents for #include "trace.h" or "trace-root.h",
> but I guess this is not possible/practice from checkpatch?

... I'm also concerned about false positives.

> If we could only warn for files moved that actually include
> trace.h or trace-root.h, we could avoid a lot of false positives.

The existing MAINTAINERS check warns even when an existing pattern
covers the new file, e.g. when I create or rename a file scripts/qapi/*
or qapi/*.json.  The former is definitely a false positive, and mildly
annoying.  The latter, however, could be a true positive: even though
the new file is covered by the "QAPI Schema" section, *additional*
coverage by some other section may be called for, just like
qapi/machine.json is additionally covered by "Machine core".  So, even
if checkpatch.pl looked at more than just the patch, suppressing false
positives would involve guesswork.

The new trace-events check is simpler: it's *always* a false positive
when the file doesn't include trace.h or trace-root.h.

Complication: it could include via some header.  I figure that's rare
enough to be ignored.

Howver, checkpatch.pl checks *patches* by design[*].  It doesn't read
the patched files to get more context, or additional files.

Perhaps it's simply the wrong place both for the MAINTAINERS check and
the trace-events check.  We put the MAINTAINERS check there, because it
exists and developers run it.  "make check-source" would be another
option, except it doesn't exist.  CI would be yet another option, but we
should be careful about what to check only in CI.


[*] There's -f to check a source file, which checks "diff -u /dev/null
$filename".
Claudio Fontana Aug. 7, 2020, 11:07 a.m. UTC | #2
On 8/7/20 8:21 AM, Markus Armbruster wrote:
> Claudio Fontana <cfontana@suse.de> writes:
> 
>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
>> ---
>>  scripts/checkpatch.pl | 18 ++++++++++++++----
>>  1 file changed, 14 insertions(+), 4 deletions(-)
>>
>> We could do something similar to MAINTAINERS for trace-events,
>> ie warning about files added, moved, deleted if we don't see
>> an update to a trace-events file.
> 
> I like the idea, but...
> 
>> To make it more solid it would be better to check the
>> actual file contents for #include "trace.h" or "trace-root.h",
>> but I guess this is not possible/practice from checkpatch?
> 
> ... I'm also concerned about false positives.
> 
>> If we could only warn for files moved that actually include
>> trace.h or trace-root.h, we could avoid a lot of false positives.
> 
> The existing MAINTAINERS check warns even when an existing pattern
> covers the new file, e.g. when I create or rename a file scripts/qapi/*
> or qapi/*.json.  The former is definitely a false positive, and mildly
> annoying.  The latter, however, could be a true positive: even though
> the new file is covered by the "QAPI Schema" section, *additional*
> coverage by some other section may be called for, just like
> qapi/machine.json is additionally covered by "Machine core".  So, even
> if checkpatch.pl looked at more than just the patch, suppressing false
> positives would involve guesswork.
> 
> The new trace-events check is simpler: it's *always* a false positive
> when the file doesn't include trace.h or trace-root.h.
> 
> Complication: it could include via some header.  I figure that's rare
> enough to be ignored.


Agreed with all the above. I think something like this would be useful (and not annoying)
only if we could at least limit the false positives by checking that the file effectively includes trace.h or trace-root.h .

> 
> Howver, checkpatch.pl checks *patches* by design[*].  It doesn't read
> the patched files to get more context, or additional files.


Right - if we do end up checking the patched files for this feature though (thus breaking this design rule),
would this have any other consequence beyond providing this feature?

We need to call checkpatch.pl from the top srcdir anyway,
and if we don't find the patched file or we don't match trace.h or trace-root.h in there, well we just don't emit the warning...

> 
> Perhaps it's simply the wrong place both for the MAINTAINERS check and
> the trace-events check.  We put the MAINTAINERS check there, because it
> exists and developers run it.  "make check-source" would be another
> option, except it doesn't exist.  CI would be yet another option, but we
> should be careful about what to check only in CI.
> 
> 
> [*] There's -f to check a source file, which checks "diff -u /dev/null
> $filename".
> 

Won't insist, would just have found it useful to avoid forgetting that piece when moving stuff around.

Just for kicks I will send an RFC v2 to see what it could look like attempting to look for trace.h and trace-root.h,
probably it's something I would personally use.

Ciao, thanks!

Claudio
diff mbox series

Patch

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index bd3faa154c..1c8afebed5 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1300,6 +1300,7 @@  sub process {
 	my $in_header_lines = $file ? 0 : 1;
 	my $in_commit_log = 0;		#Scanning lines before patch
 	my $reported_maintainer_file = 0;
+	my $reported_trace_events_file = 0;
 	my $non_utf8_charset = 0;
 
 	our @report = ();
@@ -1524,15 +1525,24 @@  sub process {
 		if ($line =~ /^\s*MAINTAINERS\s*\|/) {
 			$reported_maintainer_file = 1;
 		}
-
+# similar check for trace-events
+		if ($line =~ /^\s*trace-events\s*\|/) {
+			$reported_trace_events_file = 1;
+		}
 # Check for added, moved or deleted files
-		if (!$reported_maintainer_file && !$in_commit_log &&
+		if (!$in_commit_log &&
 		    ($line =~ /^(?:new|deleted) file mode\s*\d+\s*$/ ||
 		     $line =~ /^rename (?:from|to) [\w\/\.\-]+\s*$/ ||
 		     ($line =~ /\{\s*([\w\/\.\-]*)\s*\=\>\s*([\w\/\.\-]*)\s*\}/ &&
 		      (defined($1) || defined($2))))) {
-			$reported_maintainer_file = 1;
-			WARN("added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
+			if (!$reported_maintainer_file) {
+				$reported_maintainer_file = 1;
+				WARN("added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
+			}
+			if (!$reported_trace_events_file) {
+				$reported_trace_events_file = 1;
+				WARN("added, moved or deleted file(s), does trace-events need updating?\n" . $herecurr);
+			}
 		}
 
 # Check for wrappage within a valid hunk of the file