@matheusbsbs / matheus-bagliano / commits / 8da56a4848
Fork 0

userdiff: fix some corner cases in dts regex

While reviewing some dts diffs recently I noticed that the hunk header logic was failing to find the containing node. This is because the regex doesn't consider properties that may span multiple lines, i.e. property = <something>, <something_else>; and it got hung up on comments inside nodes that look like the root node because they start with '/*'. Add tests for these cases and update the regex to find them. Maybe detecting the root node is too complicated but forcing it to be a backslash with any amount of whitespace up to an open bracket seemed OK. I tried to detect that a comment is in-between the two parts but I wasn't happy so I just dropped it. Cc: Rob Herring <robh+dt@kernel.org> Cc: Frank Rowand <frowand.list@gmail.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org> Reviewed-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stephen Boyd committed Oct 20, 2019 at 11:52 UTC 8da56a484800023a545d7a7c022473f5aa9e720f
5 files changed +33 -2
t/t4018/dts-nodes-boolean-prop new
+9
@@ -0,0 +1,9 @@
1 +/ {
2 + label_1: node1@ff00 {
3 + RIGHT@deadf00,4000 {
4 + boolean-prop1;
5 +
6 + ChangeMe;
7 + };
8 + };
9 +};
t/t4018/dts-nodes-multiline-prop new
+13
@@ -0,0 +1,13 @@
1 +/ {
2 + label_1: node1@ff00 {
3 + RIGHT@deadf00,4000 {
4 + multilineprop = <3>,
5 + <4>,
6 + <5>,
7 + <6>,
8 + <7>;
9 +
10 + ChangeMe = <0xffeedd00>;
11 + };
12 + };
13 +};
t/t4018/dts-root
+1 -1
@@ -1,4 +1,4 @@
1 -/RIGHT { /* Technically just supposed to be a slash */
1 +/ { RIGHT /* Technically just supposed to be a slash and brace */
2 #size-cells = <1>;
3
4 ChangeMe = <0xffeedd00>;
t/t4018/dts-root-comment new
+8
@@ -0,0 +1,8 @@
1 +/ { RIGHT /* Technically just supposed to be a slash and brace */
2 + #size-cells = <1>;
3 +
4 + /* This comment should be ignored */
5 +
6 + some-property = <40+2>;
7 + ChangeMe = <0xffeedd00>;
8 +};
userdiff.c
+2 -1
@@ -25,8 +25,9 @@ IPATTERN("ada",
25 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
26 PATTERNS("dts",
27 "!;\n"
28 + "!=\n"
29 /* lines beginning with a word optionally preceded by '&' or the root */
29 - "^[ \t]*((/|&?[a-zA-Z_]).*)",
30 + "^[ \t]*((/[ \t]*\\{|&?[a-zA-Z_]).*)",
31 /* -- */
32 /* Property names and math operators */
33 "[a-zA-Z0-9,._+?#-]+"