userdiff: add a builtin pattern for dts files

The Linux kernel receives many patches to the devicetree files each
release. The hunk header for those patches typically show nothing,
making it difficult to figure out what node is being modified without
applying the patch or opening the file and seeking to the context. Let's
add a builtin 'dts' pattern to git so that users can get better diff
output on dts files when they use the diff=dts driver.

The regex has been constructed based on the spec at devicetree.org[1]
and with some help from Johannes Sixt.

[1] https://github.com/devicetree-org/devicetree-specification/releases/latest

Cc: Rob Herring <robh+dt@kernel.org>
Cc: Frank Rowand <frowand.list@gmail.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stephen Boyd 2019-08-19 14:22:43 -07:00 коммит произвёл Junio C Hamano
Родитель 5fa0f5238b
Коммит 3c81760bc6
14 изменённых файлов: 168 добавлений и 0 удалений

Просмотреть файл

@ -810,6 +810,8 @@ patterns are available:
- `css` suitable for cascading style sheets.
- `dts` suitable for devicetree (DTS) files.
- `fortran` suitable for source code in the Fortran language.
- `fountain` suitable for Fountain documents.

Просмотреть файл

@ -31,6 +31,7 @@ diffpatterns="
cpp
csharp
css
dts
fortran
fountain
golang

9
t/t4018/dts-labels Normal file
Просмотреть файл

@ -0,0 +1,9 @@
/ {
label_1: node1@ff00 {
label2: RIGHT {
vendor,some-property;
ChangeMe = <0x45-30>;
};
};
};

Просмотреть файл

@ -0,0 +1,8 @@
/ {
label_1: node1 {
RIGHT {
prop-array = <1>, <4>;
ChangeMe = <0xffeedd00>;
};
};
};

8
t/t4018/dts-nodes Normal file
Просмотреть файл

@ -0,0 +1,8 @@
/ {
label_1: node1@ff00 {
RIGHT@deadf00,4000 {
#size-cells = <1>;
ChangeMe = <0xffeedd00>;
};
};
};

Просмотреть файл

@ -0,0 +1,8 @@
/ {
label_1: node1@ff00 {
RIGHT@deadf00,4000 /* &a comment */ {
#size-cells = <1>;
ChangeMe = <0xffeedd00>;
};
};
};

Просмотреть файл

@ -0,0 +1,8 @@
/ {
label_1: node1@ff00 {
RIGHT@deadf00,4000 { /* a trailing comment */
#size-cells = <1>;
ChangeMe = <0xffeedd00>;
};
};
};

9
t/t4018/dts-reference Normal file
Просмотреть файл

@ -0,0 +1,9 @@
&label_1 {
TEST = <455>;
};
&RIGHT {
vendor,some-property;
ChangeMe = <0x45-30>;
};

5
t/t4018/dts-root Normal file
Просмотреть файл

@ -0,0 +1,5 @@
/RIGHT { /* Technically just supposed to be a slash */
#size-cells = <1>;
ChangeMe = <0xffeedd00>;
};

Просмотреть файл

@ -303,6 +303,7 @@ test_language_driver bibtex
test_language_driver cpp
test_language_driver csharp
test_language_driver css
test_language_driver dts
test_language_driver fortran
test_language_driver html
test_language_driver java

37
t/t4034/dts/expect Normal file
Просмотреть файл

@ -0,0 +1,37 @@
<BOLD>diff --git a/pre b/post<RESET>
<BOLD>index b6a9051..7803aee 100644<RESET>
<BOLD>--- a/pre<RESET>
<BOLD>+++ b/post<RESET>
<CYAN>@@ -1,32 +1,32 @@<RESET>
/ {<RESET>
<RED>this_handle<RESET><GREEN>HANDLE_2<RESET>: <RED>node<RESET><GREEN>new-node<RESET>@<RED>f00<RESET><GREEN>eeda<RESET> {
compatible = "<RED>mydev<RESET><GREEN>vendor,compat<RESET>";
string-prop = <RED>start<RESET><GREEN>end<RESET>: "hello <RED>world!<RESET><GREEN>world?<RESET>" <RED>end<RESET><GREEN>start<RESET>: ;
<RED>#size-cells<RESET><GREEN>#address-cells<RESET> = <<RED>0+0<RESET><GREEN>0+40<RESET>>;
reg = <<RED>0xf00<RESET><GREEN>0xeeda<RESET>>;
prop = <<GREEN>(<RESET>1<GREEN>)<RESET>>;
prop = <<GREEN>(<RESET>-1e10<GREEN>)<RESET>>;
prop = <(!<RED>3<RESET><GREEN>1<RESET>)>;
prop = <(~<RED>3<RESET><GREEN>1<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>*<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>&<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>*<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>/<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>%<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3+4<RESET><GREEN>1+2<RESET>)>;
prop = <(<RED>3-4<RESET><GREEN>1-2<RESET>)>;
prop = /bits/ <RED>64<RESET><GREEN>32<RESET> <(<RED>3<RESET><GREEN>1<RESET><<<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>>><RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>&<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>^<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>|<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>&&<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>3<RESET><GREEN>1<RESET>||<RED>4<RESET><GREEN>2<RESET>)>;
prop = <(<RED>4?5<RESET><GREEN>1?2<RESET>:3)>;
list = <&<RED>this_handle<RESET><GREEN>HANDLE_2<RESET>>, <0 0 0 <RED>0<RESET><GREEN>1<RESET>>;
};<RESET>
&<RED>phandle<RESET><GREEN>phandle2<RESET> {
<RED>pre-phandle<RESET><GREEN>prop_handle<RESET> = <&<RED>this_handle<RESET><GREEN>HANDLE_2<RESET>>;
};<RESET>
};<RESET>

32
t/t4034/dts/post Normal file
Просмотреть файл

@ -0,0 +1,32 @@
/ {
HANDLE_2: new-node@eeda {
compatible = "vendor,compat";
string-prop = end: "hello world?" start: ;
#address-cells = <0+40>;
reg = <0xeeda>;
prop = <(1)>;
prop = <(-1e10)>;
prop = <(!1)>;
prop = <(~1)>;
prop = <(1*2)>;
prop = <(1&2)>;
prop = <(1*2)>;
prop = <(1/2)>;
prop = <(1%2)>;
prop = <(1+2)>;
prop = <(1-2)>;
prop = /bits/ 32 <(1<<2)>;
prop = <(1>>2)>;
prop = <(1&2)>;
prop = <(1^2)>;
prop = <(1|2)>;
prop = <(1&&2)>;
prop = <(1||2)>;
prop = <(1?2:3)>;
list = <&HANDLE_2>, <0 0 0 1>;
};
&phandle2 {
prop_handle = <&HANDLE_2>;
};
};

32
t/t4034/dts/pre Normal file
Просмотреть файл

@ -0,0 +1,32 @@
/ {
this_handle: node@f00 {
compatible = "mydev";
string-prop = start: "hello world!" end: ;
#size-cells = <0+0>;
reg = <0xf00>;
prop = <1>;
prop = <-1e10>;
prop = <(!3)>;
prop = <(~3)>;
prop = <(3*4)>;
prop = <(3&4)>;
prop = <(3*4)>;
prop = <(3/4)>;
prop = <(3%4)>;
prop = <(3+4)>;
prop = <(3-4)>;
prop = /bits/ 64 <(3<<4)>;
prop = <(3>>4)>;
prop = <(3&4)>;
prop = <(3^4)>;
prop = <(3|4)>;
prop = <(3&&4)>;
prop = <(3||4)>;
prop = <(4?5:3)>;
list = <&this_handle>, <0 0 0 0>;
};
&phandle {
pre-phandle = <&this_handle>;
};
};

Просмотреть файл

@ -23,6 +23,14 @@ IPATTERN("ada",
"[a-zA-Z][a-zA-Z0-9_]*"
"|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
"|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
PATTERNS("dts",
"!;\n"
/* lines beginning with a word optionally preceded by '&' or the root */
"^[ \t]*((/|&?[a-zA-Z_]).*)",
/* -- */
/* Property names and math operators */
"[a-zA-Z0-9,._+?#-]+"
"|[-+*/%&^|!~]|>>|<<|&&|\\|\\|"),
IPATTERN("fortran",
"!^([C*]|[ \t]*!)\n"
"!^[ \t]*MODULE[ \t]+PROCEDURE[ \t]\n"