diff mbox series

checkpatch: Warn if DT bindings are not in schema format

Message ID 20190913211349.28245-1-robh@kernel.org
State Accepted
Commit e400edb141d74aa2f04d0071aadb47fdb8f7ae55
Headers show
Series checkpatch: Warn if DT bindings are not in schema format | expand

Commit Message

Rob Herring Sept. 13, 2019, 9:13 p.m. UTC
DT bindings are moving to using a json-schema based schema format
instead of freeform text. Add a checkpatch.pl check to encourage using
the schema for new bindings. It's not yet a requirement, but is
progressively being required by some maintainers.

Cc: Andy Whitcroft <apw@canonical.com>
Cc: Joe Perches <joe@perches.com>
Signed-off-by: Rob Herring <robh@kernel.org>

---
 scripts/checkpatch.pl | 8 ++++++++
 1 file changed, 8 insertions(+)

-- 
2.20.1

Comments

Joe Perches Sept. 13, 2019, 9:48 p.m. UTC | #1
On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:
> DT bindings are moving to using a json-schema based schema format

> instead of freeform text. Add a checkpatch.pl check to encourage using

> the schema for new bindings. It's not yet a requirement, but is

> progressively being required by some maintainers.

[]
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

[]
> @@ -2822,6 +2822,14 @@ sub process {

>  			     "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

>  		}

>  

> +# Check for adding new DT bindings not in schema format

> +		if (!$in_commit_log &&

> +		    ($line =~ /^new file mode\s*\d+\s*$/) &&

> +		    ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> +			WARN("DT_SCHEMA_BINDING_PATCH",

> +			     "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> +		}

> +


As this already seems to be git dependent, perhaps
it's easier to read with a single line test like:

		if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {
			etc...
		}

There are ~3500 existing .txt files:

$ git ls-files -- 'Documentation/devicetree/bindings/*.txt' | wc -l
3476

Are these going to be converted somehow?

What about files like these? (not .txt)

Documentation/devicetree/bindings/timer/st,stih407-lpc
Documentation/devicetree/bindings/nds32/andestech-boards
Documentation/devicetree/bindings/media/nokia,n900-ir
Documentation/devicetree/bindings/interrupt-controller/ti,omap4-wugen-mpu
Documentation/devicetree/bindings/arm/cpu-enable-method/nuvoton,npcm750-smp
Documentation/devicetree/bindings/arm/cpu-enable-method/marvell,berlin-smp
Documentation/devicetree/bindings/arm/cpu-enable-method/al,alpine-smp
Documentation/devicetree/bindings/arm/arm-boards
Rob Herring Sept. 16, 2019, 6:21 p.m. UTC | #2
On Fri, Sep 13, 2019 at 4:48 PM Joe Perches <joe@perches.com> wrote:
>

> On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:

> > DT bindings are moving to using a json-schema based schema format

> > instead of freeform text. Add a checkpatch.pl check to encourage using

> > the schema for new bindings. It's not yet a requirement, but is

> > progressively being required by some maintainers.

> []

> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

> []

> > @@ -2822,6 +2822,14 @@ sub process {

> >                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

> >               }

> >

> > +# Check for adding new DT bindings not in schema format

> > +             if (!$in_commit_log &&

> > +                 ($line =~ /^new file mode\s*\d+\s*$/) &&

> > +                 ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> > +                     WARN("DT_SCHEMA_BINDING_PATCH",

> > +                          "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> > +             }

> > +

>

> As this already seems to be git dependent, perhaps

> it's easier to read with a single line test like:

>

>                 if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {

>                         etc...

>                 }


Okay. I wasn't too concerned about non-git diffs as I rarely see those anymore.

>

> There are ~3500 existing .txt files:

>

> $ git ls-files -- 'Documentation/devicetree/bindings/*.txt' | wc -l

> 3476

>

> Are these going to be converted somehow?


Patches welcome! We're working on it.

>

> What about files like these? (not .txt)

>

> Documentation/devicetree/bindings/timer/st,stih407-lpc

> Documentation/devicetree/bindings/nds32/andestech-boards

> Documentation/devicetree/bindings/media/nokia,n900-ir

> Documentation/devicetree/bindings/interrupt-controller/ti,omap4-wugen-mpu

> Documentation/devicetree/bindings/arm/cpu-enable-method/nuvoton,npcm750-smp

> Documentation/devicetree/bindings/arm/cpu-enable-method/marvell,berlin-smp

> Documentation/devicetree/bindings/arm/cpu-enable-method/al,alpine-smp

> Documentation/devicetree/bindings/arm/arm-boards


What about them? This check is only for new files and no one runs
checkpatch.pl on binding txt files. If someone submits something
without an extension, then I'll catch that in review. I'm not too
worried about 8 out of 3500 cases.

Rob
Rob Herring Sept. 27, 2019, 2:02 p.m. UTC | #3
On Fri, Sep 13, 2019 at 4:48 PM Joe Perches <joe@perches.com> wrote:
>

> On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:

> > DT bindings are moving to using a json-schema based schema format

> > instead of freeform text. Add a checkpatch.pl check to encourage using

> > the schema for new bindings. It's not yet a requirement, but is

> > progressively being required by some maintainers.

> []

> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

> []

> > @@ -2822,6 +2822,14 @@ sub process {

> >                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

> >               }

> >

> > +# Check for adding new DT bindings not in schema format

> > +             if (!$in_commit_log &&

> > +                 ($line =~ /^new file mode\s*\d+\s*$/) &&

> > +                 ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> > +                     WARN("DT_SCHEMA_BINDING_PATCH",

> > +                          "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> > +             }

> > +

>

> As this already seems to be git dependent, perhaps


It's quite rare to see a non git generated diff these days.

> it's easier to read with a single line test like:

>

>                 if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {

>                         etc...

>                 }


I frequently do 'git show $commit | scripts/checkpatch.pl' and this
doesn't work with that. I really should have a '--pretty=email' in
there, but I just ignore the commit msg warnings. In any case, that
still doesn't help because there's no diffstat. There's probably some
way to turn that on or just use git-format-patch, but really we want
this to work with any git diff.

Rob
Joe Perches Sept. 27, 2019, 2:29 p.m. UTC | #4
On Fri, 2019-09-27 at 09:02 -0500, Rob Herring wrote:
> On Fri, Sep 13, 2019 at 4:48 PM Joe Perches <joe@perches.com> wrote:

> > On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:

> > > DT bindings are moving to using a json-schema based schema format

> > > instead of freeform text. Add a checkpatch.pl check to encourage using

> > > the schema for new bindings. It's not yet a requirement, but is

> > > progressively being required by some maintainers.

> > []

> > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

> > []

> > > @@ -2822,6 +2822,14 @@ sub process {

> > >                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

> > >               }

> > > 

> > > +# Check for adding new DT bindings not in schema format

> > > +             if (!$in_commit_log &&

> > > +                 ($line =~ /^new file mode\s*\d+\s*$/) &&

> > > +                 ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> > > +                     WARN("DT_SCHEMA_BINDING_PATCH",

> > > +                          "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> > > +             }

> > > +

> > 

> > As this already seems to be git dependent, perhaps

> 

> It's quite rare to see a non git generated diff these days.

> 

> > it's easier to read with a single line test like:

> > 

> >                 if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {

> >                         etc...

> >                 }

> 

> I frequently do 'git show $commit | scripts/checkpatch.pl' and this

> doesn't work with that. I really should have a '--pretty=email' in

> there, but I just ignore the commit msg warnings. In any case, that

> still doesn't help because there's no diffstat. There's probably some

> way to turn that on or just use git-format-patch, but really we want

> this to work with any git diff.


I don't understand your argument against what I proposed at all.

and btw:

$ git format-patch -1 --stdout <commit> | ./scripts/checkpatch.pl
Rob Herring Sept. 27, 2019, 3:39 p.m. UTC | #5
On Fri, Sep 27, 2019 at 9:29 AM Joe Perches <joe@perches.com> wrote:
>

> On Fri, 2019-09-27 at 09:02 -0500, Rob Herring wrote:

> > On Fri, Sep 13, 2019 at 4:48 PM Joe Perches <joe@perches.com> wrote:

> > > On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:

> > > > DT bindings are moving to using a json-schema based schema format

> > > > instead of freeform text. Add a checkpatch.pl check to encourage using

> > > > the schema for new bindings. It's not yet a requirement, but is

> > > > progressively being required by some maintainers.

> > > []

> > > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

> > > []

> > > > @@ -2822,6 +2822,14 @@ sub process {

> > > >                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

> > > >               }

> > > >

> > > > +# Check for adding new DT bindings not in schema format

> > > > +             if (!$in_commit_log &&

> > > > +                 ($line =~ /^new file mode\s*\d+\s*$/) &&

> > > > +                 ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> > > > +                     WARN("DT_SCHEMA_BINDING_PATCH",

> > > > +                          "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> > > > +             }

> > > > +

> > >

> > > As this already seems to be git dependent, perhaps

> >

> > It's quite rare to see a non git generated diff these days.

> >

> > > it's easier to read with a single line test like:

> > >

> > >                 if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {

> > >                         etc...

> > >                 }

> >

> > I frequently do 'git show $commit | scripts/checkpatch.pl' and this

> > doesn't work with that. I really should have a '--pretty=email' in

> > there, but I just ignore the commit msg warnings. In any case, that

> > still doesn't help because there's no diffstat. There's probably some

> > way to turn that on or just use git-format-patch, but really we want

> > this to work with any git diff.

>

> I don't understand your argument against what I proposed at all.


It is dependent on the commit message rather than the diff itself. I
want it to work with or without a diffstat.

> and btw:

>

> $ git format-patch -1 --stdout <commit> | ./scripts/checkpatch.pl


Yes, I stated this was possible. My concern is there are lots of ways
to generate a diff in git. My way works for *all* of them. Yours
doesn't.

Rob
Rob Herring Oct. 11, 2019, 5:56 p.m. UTC | #6
On Fri, Sep 27, 2019 at 10:39 AM Rob Herring <robh@kernel.org> wrote:
>

> On Fri, Sep 27, 2019 at 9:29 AM Joe Perches <joe@perches.com> wrote:

> >

> > On Fri, 2019-09-27 at 09:02 -0500, Rob Herring wrote:

> > > On Fri, Sep 13, 2019 at 4:48 PM Joe Perches <joe@perches.com> wrote:

> > > > On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:

> > > > > DT bindings are moving to using a json-schema based schema format

> > > > > instead of freeform text. Add a checkpatch.pl check to encourage using

> > > > > the schema for new bindings. It's not yet a requirement, but is

> > > > > progressively being required by some maintainers.

> > > > []

> > > > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

> > > > []

> > > > > @@ -2822,6 +2822,14 @@ sub process {

> > > > >                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

> > > > >               }

> > > > >

> > > > > +# Check for adding new DT bindings not in schema format

> > > > > +             if (!$in_commit_log &&

> > > > > +                 ($line =~ /^new file mode\s*\d+\s*$/) &&

> > > > > +                 ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> > > > > +                     WARN("DT_SCHEMA_BINDING_PATCH",

> > > > > +                          "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> > > > > +             }

> > > > > +

> > > >

> > > > As this already seems to be git dependent, perhaps

> > >

> > > It's quite rare to see a non git generated diff these days.

> > >

> > > > it's easier to read with a single line test like:

> > > >

> > > >                 if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {

> > > >                         etc...

> > > >                 }

> > >

> > > I frequently do 'git show $commit | scripts/checkpatch.pl' and this

> > > doesn't work with that. I really should have a '--pretty=email' in

> > > there, but I just ignore the commit msg warnings. In any case, that

> > > still doesn't help because there's no diffstat. There's probably some

> > > way to turn that on or just use git-format-patch, but really we want

> > > this to work with any git diff.

> >

> > I don't understand your argument against what I proposed at all.

>

> It is dependent on the commit message rather than the diff itself. I

> want it to work with or without a diffstat.

>

> > and btw:

> >

> > $ git format-patch -1 --stdout <commit> | ./scripts/checkpatch.pl

>

> Yes, I stated this was possible. My concern is there are lots of ways

> to generate a diff in git. My way works for *all* of them. Yours

> doesn't.


Joe, are you okay with this?

Rob
Joe Perches Oct. 11, 2019, 6:02 p.m. UTC | #7
On Fri, 2019-10-11 at 12:56 -0500, Rob Herring wrote:
> On Fri, Sep 27, 2019 at 10:39 AM Rob Herring <robh@kernel.org> wrote:

> > On Fri, Sep 27, 2019 at 9:29 AM Joe Perches <joe@perches.com> wrote:

> > > On Fri, 2019-09-27 at 09:02 -0500, Rob Herring wrote:

> > > > On Fri, Sep 13, 2019 at 4:48 PM Joe Perches <joe@perches.com> wrote:

> > > > > On Fri, 2019-09-13 at 16:13 -0500, Rob Herring wrote:

> > > > > > DT bindings are moving to using a json-schema based schema format

> > > > > > instead of freeform text. Add a checkpatch.pl check to encourage using

> > > > > > the schema for new bindings. It's not yet a requirement, but is

> > > > > > progressively being required by some maintainers.

> > > > > []

> > > > > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

> > > > > []

> > > > > > @@ -2822,6 +2822,14 @@ sub process {

> > > > > >                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);

> > > > > >               }

> > > > > > 

> > > > > > +# Check for adding new DT bindings not in schema format

> > > > > > +             if (!$in_commit_log &&

> > > > > > +                 ($line =~ /^new file mode\s*\d+\s*$/) &&

> > > > > > +                 ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {

> > > > > > +                     WARN("DT_SCHEMA_BINDING_PATCH",

> > > > > > +                          "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");

> > > > > > +             }

> > > > > > +

> > > > > 

> > > > > As this already seems to be git dependent, perhaps

> > > > 

> > > > It's quite rare to see a non git generated diff these days.

> > > > 

> > > > > it's easier to read with a single line test like:

> > > > > 

> > > > >                 if ($line =~ m{^\s*create mode\s*\d+\s*Documentation/devicetree/bindings/.*\.txt$}) {

> > > > >                         etc...

> > > > >                 }

> > > > 

> > > > I frequently do 'git show $commit | scripts/checkpatch.pl' and this

> > > > doesn't work with that. I really should have a '--pretty=email' in

> > > > there, but I just ignore the commit msg warnings. In any case, that

> > > > still doesn't help because there's no diffstat. There's probably some

> > > > way to turn that on or just use git-format-patch, but really we want

> > > > this to work with any git diff.

> > > 

> > > I don't understand your argument against what I proposed at all.

> > 

> > It is dependent on the commit message rather than the diff itself. I

> > want it to work with or without a diffstat.

> > 

> > > and btw:

> > > 

> > > $ git format-patch -1 --stdout <commit> | ./scripts/checkpatch.pl

> > 

> > Yes, I stated this was possible. My concern is there are lots of ways

> > to generate a diff in git. My way works for *all* of them. Yours

> > doesn't.

> 

> Joe, are you okay with this?


Sure, Andrew Morton does most of the checkpatch upstreaming, but
if you want to send your own pull request, I've no objection.

> Rob
diff mbox series

Patch

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 93a7edfe0f05..1cbd85f16e32 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2822,6 +2822,14 @@  sub process {
 			     "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
 		}
 
+# Check for adding new DT bindings not in schema format
+		if (!$in_commit_log &&
+		    ($line =~ /^new file mode\s*\d+\s*$/) &&
+		    ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {
+			WARN("DT_SCHEMA_BINDING_PATCH",
+			     "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");
+		}
+
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("CORRUPTED_PATCH",