Git fork

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>

authored by

Stephen Boyd and committed by
Junio C Hamano
8da56a48 3c81760b

+33 -2
+9
t/t4018/dts-nodes-boolean-prop
··· 1 + / { 2 + label_1: node1@ff00 { 3 + RIGHT@deadf00,4000 { 4 + boolean-prop1; 5 + 6 + ChangeMe; 7 + }; 8 + }; 9 + };
+13
t/t4018/dts-nodes-multiline-prop
··· 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 + };
+1 -1
t/t4018/dts-root
··· 1 - /RIGHT { /* Technically just supposed to be a slash */ 1 + / { RIGHT /* Technically just supposed to be a slash and brace */ 2 2 #size-cells = <1>; 3 3 4 4 ChangeMe = <0xffeedd00>;
+8
t/t4018/dts-root-comment
··· 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 + };
+2 -1
userdiff.c
··· 25 25 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"), 26 26 PATTERNS("dts", 27 27 "!;\n" 28 + "!=\n" 28 29 /* lines beginning with a word optionally preceded by '&' or the root */ 29 - "^[ \t]*((/|&?[a-zA-Z_]).*)", 30 + "^[ \t]*((/[ \t]*\\{|&?[a-zA-Z_]).*)", 30 31 /* -- */ 31 32 /* Property names and math operators */ 32 33 "[a-zA-Z0-9,._+?#-]+"