threads / patch / 54363

patchuserdiff: expand detected chunk headers for css

Subject: [PATCH] userdiff: expand detected chunk headers for css

## tl;dr

5 messages between Oct 7, 2020 and Oct 8, 2020. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Sohom Datta via GitGitGadget· Oct 7, 2020, 09:25 UTC · lore
From: Sohom <sohom.datta@learner.manipal.edu>

Added support for classes, ids, :root selectors as well as @-based statements (ex: @page, @media and @keyframes ).

Also added tests for the same.
Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
---
    userdiff: Expand detected chunk headers for css
    
    Currently, the regex used for the CSS builtin diff driver in git is only
    able to show chunk headers for lines that start with a number, a letter
    or an underscore.
    
    However, the regex fails to detect classes (starts with a .), ids
    (starts with a #), :root and attribute-value based selectors (for
    example [class*="col-"]), as well as @based block-level statements like 
    @page,@keyframes and @media since all of them, start with a special
    character.
    
    I've modified the chunk header CSS regex so that it is able to detect
    the statements above and add them to the chunk header.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-866%2Fsohomdatta1%2Fcss-userdiff-fix-test-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-866/sohomdatta1/css-userdiff-fix-test-v1
Pull-Request: https://github.com/git/git/pull/866
 t/t4018/css-attribute-value-selector |  4 ++++
 t/t4018/css-block-level-@-statements | 10 ++++++++++
 t/t4018/css-class-selector           |  4 ++++
 t/t4018/css-id-selector              |  4 ++++
 t/t4018/css-root-selector            |  4 ++++
 userdiff.c                           |  2 +-
 6 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 t/t4018/css-attribute-value-selector
 create mode 100644 t/t4018/css-block-level-@-statements
 create mode 100644 t/t4018/css-class-selector
 create mode 100644 t/t4018/css-id-selector
 create mode 100644 t/t4018/css-root-selector
Show changes to 6 files +27 −1

t/t4018/css-attribute-value-selector, t/t4018/css-block-level-@-statements, t/t4018/css-class-selector, t/t4018/css-id-selector, t/t4018/css-root-selector, userdiff.c

diff --git a/t/t4018/css-attribute-value-selector b/t/t4018/css-attribute-value-selector
new file mode 100644
index 0000000000..918256b20c
--- /dev/null
+++ b/t/t4018/css-attribute-value-selector
@@ -0,0 +1,4 @@
+[class*="RIGHT"] {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-block-level-@-statements b/t/t4018/css-block-level-@-statements
new file mode 100644
index 0000000000..d6755f2f3d
--- /dev/null
+++ b/t/t4018/css-block-level-@-statements
@@ -0,0 +1,10 @@
+@keyframes RIGHT {
+    from {
+        background : #000;
+        border : 10px ChangeMe #C6C6C6;
+    }
+    to {
+        background : #fff;
+        border : 10px solid #C6C6C6;
+    }
+}
diff --git a/t/t4018/css-class-selector b/t/t4018/css-class-selector
new file mode 100644
index 0000000000..f790a0062f
--- /dev/null
+++ b/t/t4018/css-class-selector
@@ -0,0 +1,4 @@
+.RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-id-selector b/t/t4018/css-id-selector
new file mode 100644
index 0000000000..17c5111052
--- /dev/null
+++ b/t/t4018/css-id-selector
@@ -0,0 +1,4 @@
+#RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-root-selector b/t/t4018/css-root-selector
new file mode 100644
index 0000000000..22b958e369
--- /dev/null
+++ b/t/t4018/css-root-selector
@@ -0,0 +1,4 @@
+:RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/userdiff.c b/userdiff.c
index fde02f225b..49c9771891 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -200,7 +200,7 @@ PATTERNS("csharp",
 	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
 IPATTERN("css",
 	 "![:;][[:space:]]*$\n"
-	 "^[_a-z0-9].*$",
+	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",
 	 /* -- */
 	 /*
 	  * This regex comes from W3C CSS specs. Should theoretically also

base-commit: d98273ba77e1ab9ec755576bc86c716a97bf59d7
-- 
gitgitgadget
Johannes Sixt· Oct 7, 2020, 16:51 UTC · re: Sohom Datta via GitGitGadget · lore

Re: [PATCH] userdiff: expand detected chunk headers for css

Am 07.10.20 um 11:25 schrieb Sohom Datta via GitGitGadget:
> From: Sohom <sohom.datta@learner.manipal.edu>
> 
> Added support for classes, ids, :root selectors
s/Added/Add/ since we prefer this sentence in imperative mood.
> as well as @-based statements (ex: @page, @media
> and @keyframes ).
> 
> Also added tests for the same.
Ditto, or just drop this sentence.
Show 14 quoted lines
> 
> Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
> ---
>     userdiff: Expand detected chunk headers for css
>     
>     Currently, the regex used for the CSS builtin diff driver in git is only
>     able to show chunk headers for lines that start with a number, a letter
>     or an underscore.
>     
>     However, the regex fails to detect classes (starts with a .), ids
>     (starts with a #), :root and attribute-value based selectors (for
>     example [class*="col-"]), as well as @based block-level statements like 
>     @page,@keyframes and @media since all of them, start with a special
>     character.

This text would have made a very good introductory part of the commit message, but since it is after the three-dash separator, it is ignored.

The patch text looks good.
Show 93 quoted lines
>     
>     I've modified the chunk header CSS regex so that it is able to detect
>     the statements above and add them to the chunk header.
> 
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-866%2Fsohomdatta1%2Fcss-userdiff-fix-test-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-866/sohomdatta1/css-userdiff-fix-test-v1
> Pull-Request: https://github.com/git/git/pull/866
> 
>  t/t4018/css-attribute-value-selector |  4 ++++
>  t/t4018/css-block-level-@-statements | 10 ++++++++++
>  t/t4018/css-class-selector           |  4 ++++
>  t/t4018/css-id-selector              |  4 ++++
>  t/t4018/css-root-selector            |  4 ++++
>  userdiff.c                           |  2 +-
>  6 files changed, 27 insertions(+), 1 deletion(-)
>  create mode 100644 t/t4018/css-attribute-value-selector
>  create mode 100644 t/t4018/css-block-level-@-statements
>  create mode 100644 t/t4018/css-class-selector
>  create mode 100644 t/t4018/css-id-selector
>  create mode 100644 t/t4018/css-root-selector
> 
> diff --git a/t/t4018/css-attribute-value-selector b/t/t4018/css-attribute-value-selector
> new file mode 100644
> index 0000000000..918256b20c
> --- /dev/null
> +++ b/t/t4018/css-attribute-value-selector
> @@ -0,0 +1,4 @@
> +[class*="RIGHT"] {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/t/t4018/css-block-level-@-statements b/t/t4018/css-block-level-@-statements
> new file mode 100644
> index 0000000000..d6755f2f3d
> --- /dev/null
> +++ b/t/t4018/css-block-level-@-statements
> @@ -0,0 +1,10 @@
> +@keyframes RIGHT {
> +    from {
> +        background : #000;
> +        border : 10px ChangeMe #C6C6C6;
> +    }
> +    to {
> +        background : #fff;
> +        border : 10px solid #C6C6C6;
> +    }
> +}
> diff --git a/t/t4018/css-class-selector b/t/t4018/css-class-selector
> new file mode 100644
> index 0000000000..f790a0062f
> --- /dev/null
> +++ b/t/t4018/css-class-selector
> @@ -0,0 +1,4 @@
> +.RIGHT {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/t/t4018/css-id-selector b/t/t4018/css-id-selector
> new file mode 100644
> index 0000000000..17c5111052
> --- /dev/null
> +++ b/t/t4018/css-id-selector
> @@ -0,0 +1,4 @@
> +#RIGHT {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/t/t4018/css-root-selector b/t/t4018/css-root-selector
> new file mode 100644
> index 0000000000..22b958e369
> --- /dev/null
> +++ b/t/t4018/css-root-selector
> @@ -0,0 +1,4 @@
> +:RIGHT {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/userdiff.c b/userdiff.c
> index fde02f225b..49c9771891 100644
> --- a/userdiff.c
> +++ b/userdiff.c
> @@ -200,7 +200,7 @@ PATTERNS("csharp",
>  	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
>  IPATTERN("css",
>  	 "![:;][[:space:]]*$\n"
> -	 "^[_a-z0-9].*$",
> +	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",
>  	 /* -- */
>  	 /*
>  	  * This regex comes from W3C CSS specs. Should theoretically also
> 
> base-commit: d98273ba77e1ab9ec755576bc86c716a97bf59d7
> 
Junio C Hamano· Oct 7, 2020, 17:09 UTC · re: Sohom Datta via GitGitGadget · lore

Re: [PATCH] userdiff: expand detected chunk headers for css

"Sohom Datta via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 21 quoted lines
> From: Sohom <sohom.datta@learner.manipal.edu>
>
> Added support for classes, ids, :root selectors
> as well as @-based statements (ex: @page, @media
> and @keyframes ).
>
> Also added tests for the same.
>
> Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
> ---
>     userdiff: Expand detected chunk headers for css
>     
>     Currently, the regex used for the CSS builtin diff driver in git is only
>     able to show chunk headers for lines that start with a number, a letter
>     or an underscore.
>     
>     However, the regex fails to detect classes (starts with a .), ids
>     (starts with a #), :root and attribute-value based selectors (for
>     example [class*="col-"]), as well as @based block-level statements like 
>     @page,@keyframes and @media since all of them, start with a special
>     character.

The above two would be much better beginning of the log message for this change modulo a few nits.

 - We first explain what the current system does in the present
   tense.  "Currently, " at the beginning is a pure noise.
 - And we point out what may be lacking (which you did a very good
   job in the second paragraph).
 - And finally, we write in imperative mood to give an order to the
   codebase to "become like so." or an order to the patch monkey to
   "make the codebase like so."
As the last paragraph to follow the two paragraphs, something like
    Allow the selectors to begin with these special characters.
would be sufficient.
> -	 "^[_a-z0-9].*$",
> +	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",

As we seem to allow ? (i.e. zero or one) in the patterns, it probably makes it easier to read to spell the above like this instead?

- "^[_a-z0-9].*$", + "^[:[@.#]?[_a-z0-9].*$"

Sohom Datta via GitGitGadget· Oct 8, 2020, 08:36 UTC · re: Sohom Datta via GitGitGadget · lore

[PATCH v2] userdiff: expand detected chunk headers for css

From: Sohom <sohom.datta@learner.manipal.edu>

The regex used for the CSS builtin diff driver in git is only able to show chunk headers for lines that start with a number, a letter or an underscore.

However, the regex fails to detect classes (starts with a .), ids (starts with a #), :root and attribute-value based selectors (for example [class*="col-"]), as well as @based block-level statements like @page,@keyframes and @media since all of them, start with a special character.

Allow the selectors and block level statements to begin with these special characters.

Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
---
    userdiff: Expand detected chunk headers for css
    
    Changes since v1
    
     * Updated commit message as suggested by Johannes Sixt and Junio C
       Hamano
     * Simplified the regex as suggested by Junio C Hamano
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-866%2Fsohomdatta1%2Fcss-userdiff-fix-test-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-866/sohomdatta1/css-userdiff-fix-test-v2
Pull-Request: https://github.com/git/git/pull/866
Range-diff vs v1:
 1:  ca178c0cda ! 1:  a76703d4ac userdiff: expand detected chunk headers for css
     @@ Metadata
       ## Commit message ##
          userdiff: expand detected chunk headers for css
      
     -    Added support for classes, ids, :root selectors
     -    as well as @-based statements (ex: @page, @media
     -    and @keyframes ).
     +    The regex used for the CSS builtin diff driver in git is only
     +    able to show chunk headers for lines that start with a number,
     +    a letter or an underscore.
      
     -    Also added tests for the same.
     +    However, the regex fails to detect classes (starts with a .), ids
     +    (starts with a #), :root and attribute-value based selectors (for
     +    example [class*="col-"]), as well as @based block-level statements
     +    like @page,@keyframes and @media since all of them, start with a
     +    special character.
     +
     +    Allow the selectors and block level statements to begin with these
     +    special characters.
      
          Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
      
     @@ userdiff.c: PATTERNS("csharp",
       IPATTERN("css",
       	 "![:;][[:space:]]*$\n"
      -	 "^[_a-z0-9].*$",
     -+	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",
     ++	 "^[:[@.#]?[_a-z0-9].*$",
       	 /* -- */
       	 /*
       	  * This regex comes from W3C CSS specs. Should theoretically also
 t/t4018/css-attribute-value-selector |  4 ++++
 t/t4018/css-block-level-@-statements | 10 ++++++++++
 t/t4018/css-class-selector           |  4 ++++
 t/t4018/css-id-selector              |  4 ++++
 t/t4018/css-root-selector            |  4 ++++
 userdiff.c                           |  2 +-
 6 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 t/t4018/css-attribute-value-selector
 create mode 100644 t/t4018/css-block-level-@-statements
 create mode 100644 t/t4018/css-class-selector
 create mode 100644 t/t4018/css-id-selector
 create mode 100644 t/t4018/css-root-selector
Show changes to 6 files +27 −1

t/t4018/css-attribute-value-selector, t/t4018/css-block-level-@-statements, t/t4018/css-class-selector, t/t4018/css-id-selector, t/t4018/css-root-selector, userdiff.c

diff --git a/t/t4018/css-attribute-value-selector b/t/t4018/css-attribute-value-selector
new file mode 100644
index 0000000000..918256b20c
--- /dev/null
+++ b/t/t4018/css-attribute-value-selector
@@ -0,0 +1,4 @@
+[class*="RIGHT"] {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-block-level-@-statements b/t/t4018/css-block-level-@-statements
new file mode 100644
index 0000000000..d6755f2f3d
--- /dev/null
+++ b/t/t4018/css-block-level-@-statements
@@ -0,0 +1,10 @@
+@keyframes RIGHT {
+    from {
+        background : #000;
+        border : 10px ChangeMe #C6C6C6;
+    }
+    to {
+        background : #fff;
+        border : 10px solid #C6C6C6;
+    }
+}
diff --git a/t/t4018/css-class-selector b/t/t4018/css-class-selector
new file mode 100644
index 0000000000..f790a0062f
--- /dev/null
+++ b/t/t4018/css-class-selector
@@ -0,0 +1,4 @@
+.RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-id-selector b/t/t4018/css-id-selector
new file mode 100644
index 0000000000..17c5111052
--- /dev/null
+++ b/t/t4018/css-id-selector
@@ -0,0 +1,4 @@
+#RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-root-selector b/t/t4018/css-root-selector
new file mode 100644
index 0000000000..22b958e369
--- /dev/null
+++ b/t/t4018/css-root-selector
@@ -0,0 +1,4 @@
+:RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/userdiff.c b/userdiff.c
index fde02f225b..f6a4b0fb2e 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -200,7 +200,7 @@ PATTERNS("csharp",
 	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
 IPATTERN("css",
 	 "![:;][[:space:]]*$\n"
-	 "^[_a-z0-9].*$",
+	 "^[:[@.#]?[_a-z0-9].*$",
 	 /* -- */
 	 /*
 	  * This regex comes from W3C CSS specs. Should theoretically also

base-commit: d98273ba77e1ab9ec755576bc86c716a97bf59d7
-- 
gitgitgadget
Junio C Hamano· Oct 8, 2020, 17:23 UTC · re: Sohom Datta via GitGitGadget · lore

Re: [PATCH v2] userdiff: expand detected chunk headers for css

"Sohom Datta via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Sohom <sohom.datta@learner.manipal.edu>
I'd call this line *1* for later reference...
Show 15 quoted lines
> The regex used for the CSS builtin diff driver in git is only
> able to show chunk headers for lines that start with a number,
> a letter or an underscore.
>
> However, the regex fails to detect classes (starts with a .), ids
> (starts with a #), :root and attribute-value based selectors (for
> example [class*="col-"]), as well as @based block-level statements
> like @page,@keyframes and @media since all of them, start with a
> special character.
>
> Allow the selectors and block level statements to begin with these
> special characters.
>
> Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
> ---
Looking good.

The "Name <email>" on line *1* must match that on the last "signed-off-by" line, so I'll locally tweak the authorship information before applying the patch.

Thanks.

← back to recent threads