[Linux-kernel-mentees] [PATCH v2] checkpatch: add fix option for COMMIT_LOG_LONG_LINE
Lukas Bulwahn
lukas.bulwahn at gmail.com
Sun Nov 8 07:22:08 UTC 2020
On Sun, 8 Nov 2020, Aditya wrote:
> On 8/11/20 12:13 am, Lukas Bulwahn wrote:
> > On Sa., 7. Nov. 2020 at 15:49, Aditya <yashsri421 at gmail.com> wrote:
> >
> >> On 7/11/20 5:47 pm, Aditya Srivastava wrote:
> >>> Currently, when a line exceeds 75 characters in a commit message,
> >>> checkpatch.pl gives a warning corresponding to the same.
> >>>
> >>> E.g., running checkpatch on commit a1af2afbd244 ("drm/nouveau/volt:Fix
> >>> for some cards having 0 maximum voltage") we get this warning:
> >>>
> >>> WARNING: Possible unwrapped commit description (prefer a maximum 75
> >>> chars per line)
> >>>
> >>> Some, mostly Fermi, vbioses appear to have zero max voltage. That causes
> >> Nouveau to not parse voltage entries, thus users not being able to set
> >> higher clocks.
> >>>
> >>> Provide a fix by consuming first 70 chars of the corresponding line,
> >>> then stop at the next whitespace, and substitute it with the consumed
> >>> chars and a newline char.
> >>>
> >>> Signed-off-by: Aditya Srivastava <yashsri421 at gmail.com>
> >>> ---
> >>> scripts/checkpatch.pl | 7 +++++--
> >>> 1 file changed, 5 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> >>> index 5a1096a4e220..ee665208ef02 100755
> >>> --- a/scripts/checkpatch.pl
> >>> +++ b/scripts/checkpatch.pl
> >>> @@ -2881,8 +2881,11 @@ sub process {
> >>> $line =~ /^\s*(?:Fixes:|Link:)/i ||
> >>> # A Fixes: or Link: line
> >>> $commit_log_possible_stack_dump)) {
> >>> - WARN("COMMIT_LOG_LONG_LINE",
> >>> - "Possible unwrapped commit description
> >> (prefer a maximum 75 chars per line)\n" . $herecurr);
> >>> + if (WARN("COMMIT_LOG_LONG_LINE",
> >>> + "Possible unwrapped commit description
> >> (prefer a maximum 75 chars per line)\n" . $herecurr) &&
> >>> + $fix) {
> >>> + $fixed[$fixlinenr] =~
> >> s/(.{70}[^\s]*)\s+/$1\n/g;
> >>> + }
> >>> $commit_log_long_line = 1;
> >>> }
> >>>
> >>>
> >>
> >
> > Why do you not implement a proper word wrap function?
> >
>
> Actually, I had searched on the web regarding it before implementation.
> Here I have implemented text wrap only and regex is the best way I
> could find of implementing it. Also the same was advised at
> stackoverflow. I took help from the same.
> Link:
> https://stackoverflow.com/questions/956379/how-can-i-word-wrap-a-string-in-perl
And stackoverflow is not always a good reference.
> Apart from it, perl also provides a wrap function using module
> Text::Wrap, but I wasn't sure if I could use this module in my
> changes. So, I proceeded with regex.
>
You can look into that, understand it a bit and then just implement a word
wrap from scratch as we would need it here in checkpatch.pl, it should not
be that complicated.
> > A single commit tells us very little if this rule in checkpatch.pl really
> > is a good rule or not. A proper evaluation of typical cases of long commit
> > lines would help much more to improve this rule.
> >
>
> I generated a list of commit_long_long_line warnings with the line for
> which they are occurring at:(v4.13..v5.8)
> https://github.com/AdityaSrivast/kernel-tasks/blob/master/Task6/summary.txt
>
> As I could see, most of these messages are plain english. But there
> are few instances of links, hex, file locations, such as:
>
I see many false positive warnings; so most are cases where I would not
break the line.
> 1)https://lore.kernel.org/lkml/1559767582-11081-1-git-send-email-info@metux.net/
>
How about detecting all likely URLs and suggesting a proper Link: tag in
front of them?
> 2) /home6/tmricht/linux-next/tools/build/Makefile.build:96: recipe
> for target 'libbpf.o' failed
>
> 3) 8b 35 7b fb e2 00 mov 0xe2fb7b(%rip),%esi # ffffffff82db9e64
> <nr_cpu_ids>
>
> I think we can use a better regex like:
> s/(.{1,75}|\S{76,})(?:\s[^\S\r\n]*|\Z)/$1\n/g
>
> I tested this regex with the above cases, in which
> 1) remains unaffected
> 2) gets wrapped at "..recipe for" (which is 69 chars in length)
> 3) gets wrapped at "# ffffffff82db9e64", which is 64 in length
>
> I guess I can generate another file with how these lines will be
> changed, when used with fix option.
> What do you think?
>
I think 1, 2 and 3 should not be wrapped.
1) should be fixed by adding a Link: prefix.
2) should be warned to just drop the absolute path or so.
2) and 3) need to detected to be tool output and hence, we accept a longer
line limit here.
I also see a few tags and long commit log warnings.
Does checkpatch.pl also warn on long tags? That should be excluded from
that check.
Also, I noticed quite a few 'References: <git-sha> ("<git commit
message>")'. I think there is no standard for this yet, but maybe that is
worth a discussion to agree on something and then add documentation and a
check for that.
Lukas
More information about the Linux-kernel-mentees
mailing list