Skip to contentSkip to conversation

userdiff: expand detected chunk headers for css

PATCH Superseded Sohom Datta via GitGitGadget 3 participants 5 messages Oct 7, 2020 – Oct 8, 2020

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 userdiff: expand detected chunk headers for css

From: Sohom <[email protected]>

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

Also added tests for the same.

---
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
t/t4018/css-attribute-value-selector new file +4 -0
new file mode 100644
index 0000000000..918256b20c
@@ -0,0 +1,4 @@
+[class*="RIGHT"] {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-block-level-@-statements new file +10 -0
new file mode 100644
index 0000000000..d6755f2f3d
@@ -0,0 +1,10 @@
+@keyframes RIGHT {
+    from {
+        background : #000;
+        border : 10px ChangeMe #C6C6C6;
+    }
+    to {
+        background : #fff;
+        border : 10px solid #C6C6C6;
+    }
+}
t/t4018/css-class-selector new file +4 -0
new file mode 100644
index 0000000000..f790a0062f
@@ -0,0 +1,4 @@
+.RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-id-selector new file +4 -0
new file mode 100644
index 0000000000..17c5111052
@@ -0,0 +1,4 @@
+#RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-root-selector new file +4 -0
new file mode 100644
index 0000000000..22b958e369
@@ -0,0 +1,4 @@
+:RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
userdiff.c +1 -1
index fde02f225b..49c9771891 100644
@@ -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

Signature · 1 line
gitgitgadget
#1 lore raw

Am 07.10.20 um 11:25 schrieb Sohom Datta via GitGitGadget:

Quoted 3 lines

From: Sohom <[email protected]>

Added support for classes, ids, :root selectors

s/Added/Add/ since we prefer this sentence in imperative mood.

Quoted 4 lines

as well as @-based statements (ex: @page, @media
and @keyframes ).

Also added tests for the same.

Ditto, or just drop this sentence.

Quoted 9 lines

---
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.

Quoted 5 lines

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.

Quoted 93 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
t/t4018/css-attribute-value-selector new file +4 -0
new file mode 100644
index 0000000000..918256b20c
@@ -0,0 +1,4 @@
+[class*="RIGHT"] {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-block-level-@-statements new file +10 -0
new file mode 100644
index 0000000000..d6755f2f3d
@@ -0,0 +1,10 @@
+@keyframes RIGHT {
+    from {
+        background : #000;
+        border : 10px ChangeMe #C6C6C6;
+    }
+    to {
+        background : #fff;
+        border : 10px solid #C6C6C6;
+    }
+}
t/t4018/css-class-selector new file +4 -0
new file mode 100644
index 0000000000..f790a0062f
@@ -0,0 +1,4 @@
+.RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-id-selector new file +4 -0
new file mode 100644
index 0000000000..17c5111052
@@ -0,0 +1,4 @@
+#RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-root-selector new file +4 -0
new file mode 100644
index 0000000000..22b958e369
@@ -0,0 +1,4 @@
+:RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
userdiff.c +1 -1
index fde02f225b..49c9771891 100644
@@ -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

#2 lore raw
In reply to Sohom Datta via GitGitGadget
Quoted 16 lines · Sohom Datta via GitGitGadget

From: Sohom <[email protected]>

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

Also added tests for the same.

---
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.

Quoted 5 lines

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.

userdiff.c PATTERNS("csharp", · line 203

Quoted 2 lines
userdiff.c +1 -1
-	 "^[_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].*$"

#3 lore raw

PATCH v2 1/1 userdiff: expand detected chunk headers for css

In reply to Sohom Datta via GitGitGadget

From: Sohom <[email protected]>

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.

---
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.

@@ 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
t/t4018/css-attribute-value-selector new file +4 -0
new file mode 100644
index 0000000000..918256b20c
@@ -0,0 +1,4 @@
+[class*="RIGHT"] {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-block-level-@-statements new file +10 -0
new file mode 100644
index 0000000000..d6755f2f3d
@@ -0,0 +1,10 @@
+@keyframes RIGHT {
+    from {
+        background : #000;
+        border : 10px ChangeMe #C6C6C6;
+    }
+    to {
+        background : #fff;
+        border : 10px solid #C6C6C6;
+    }
+}
t/t4018/css-class-selector new file +4 -0
new file mode 100644
index 0000000000..f790a0062f
@@ -0,0 +1,4 @@
+.RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-id-selector new file +4 -0
new file mode 100644
index 0000000000..17c5111052
@@ -0,0 +1,4 @@
+#RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
t/t4018/css-root-selector new file +4 -0
new file mode 100644
index 0000000000..22b958e369
@@ -0,0 +1,4 @@
+:RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
userdiff.c +1 -1
index fde02f225b..f6a4b0fb2e 100644
@@ -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

Signature · 1 line
gitgitgadget
#4 lore raw
Quoted 1 line · Sohom Datta via GitGitGadget

From: Sohom <[email protected]>

I'd call this line *1* for later reference...

Quoted 10 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.

Quoted 5 lines

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

---

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.