diff mbox series

[GSoC,RFC/PATCH] userdiff: added support for diffing shell scripts

Message ID 20190322160615.27124-1-jkapil.cs@gmail.com (mailing list archive)
State New, archived
Headers show
Series [GSoC,RFC/PATCH] userdiff: added support for diffing shell scripts | expand

Commit Message

Kapil Jain March 22, 2019, 4:06 p.m. UTC
Signed-off-by: Kapil Jain <jkapil.cs@gmail.com>
---

The test written does not pass, imo there's some problem with the regex part.
please let me know about the fault.

 t/t4034-diff-words.sh | 2 ++
 t/t4034/shell/expect  | 6 ++++++
 t/t4034/shell/post    | 1 +
 t/t4034/shell/pre     | 1 +
 userdiff.c            | 7 +++++++
 5 files changed, 17 insertions(+)
 create mode 100644 t/t4034/shell/expect
 create mode 100644 t/t4034/shell/post
 create mode 100644 t/t4034/shell/pre

Comments

Christian Couder March 23, 2019, 8:04 p.m. UTC | #1
On Fri, Mar 22, 2019 at 5:08 PM Kapil Jain <jkapil.cs@gmail.com> wrote:
>
> Signed-off-by: Kapil Jain <jkapil.cs@gmail.com>
> ---
>
> The test written does not pass, imo there's some problem with the regex part.
> please let me know about the fault.

To save some work by people who could help you, it might be a good
idea to show the output of the failing test, for example the output of
`./t4034-diff-words.sh -i -v` or `./t4034-diff-words.sh -i -v -x`.
Kapil Jain March 24, 2019, 8:04 a.m. UTC | #2
On Sun, Mar 24, 2019 at 1:34 AM Christian Couder
<christian.couder@gmail.com> wrote:
>
> To save some work by people who could help you, it might be a good
> idea to show the output of the failing test, for example the output of
> `./t4034-diff-words.sh -i -v` or `./t4034-diff-words.sh -i -v -x`.

Looks like i just needed to know about -i, -v and -x switches, they
helped in debugging.
The problem was with the expect file. It is resolved now.

Thanks, will be resubmitting with updated expect file.

is the parser used to parse the expect file specific to git ? or is it
some general one ?
Christian Couder March 24, 2019, 9:19 a.m. UTC | #3
On Sun, Mar 24, 2019 at 9:04 AM Kapil Jain <jkapil.cs@gmail.com> wrote:
>
> On Sun, Mar 24, 2019 at 1:34 AM Christian Couder
> <christian.couder@gmail.com> wrote:
> >
> > To save some work by people who could help you, it might be a good
> > idea to show the output of the failing test, for example the output of
> > `./t4034-diff-words.sh -i -v` or `./t4034-diff-words.sh -i -v -x`.
>
> Looks like i just needed to know about -i, -v and -x switches, they
> helped in debugging.
> The problem was with the expect file. It is resolved now.

Great!

> Thanks, will be resubmitting with updated expect file.

It looks like you sent "[GSoC][RFC/PATCH 2/2] userdiff: added shell
script support, clears test". I think though that it should have been
named "[GSoC][RFC/PATCH v2] userdiff: added shell script support,
clears test".

"2/2" means that it is patch number 2 in a patch series that has 2
patches (which should be marked with "1/2" and "2/2"). When
resubmitting an already submitted patch (or patch series) we ask for a
version number like "v2", "v3", so that we can know that it has
already been submitted.

`git format-patch -v 2 ...` will automatically add "v2".

> is the parser used to parse the expect file specific to git ? or is it
> some general one ?

The test_language_driver() function used to test the regexps is
defined in t4034-diff-words.sh and it calls the word_diff() function
(also defined in t4034-diff-words.sh) which is:

word_diff () {
    test_must_fail git diff --no-index "$@" pre post >output &&
    test_decode_color <output >output.decrypted &&
    test_cmp expect output.decrypted
}

So it uses test_decode_color() and test_cmp() that are defined in
t/test-lib-functions.sh. test_cmp() in turn is defined using
GIT_TEST_CMP which is usually either "diff -u" or "diff -c".
Kapil Jain March 24, 2019, 10:04 a.m. UTC | #4
On Sun, Mar 24, 2019 at 2:49 PM Christian Couder
<christian.couder@gmail.com> wrote:
>
> The test_language_driver() function used to test the regexps is
> ...
> GIT_TEST_CMP which is usually either "diff -u" or "diff -c".

Thanks.

please provide some insights on the regex mentioned below:

+
+PATTERNS("shell",
+  /* Function Names */
+  "([A-Za-z_][A-Za-z0-9_]*)[[:space:]]*\\([[:space:]]*\\)[[:space:]]*\\{",
+  /* Words */
+  "([$#@A-Za-z_\"\'][$#@A-Za-z0-9_\"\']*)"),
+

reference mail:
https://public-inbox.org/git/20190324084523.8744-1-jkapil.cs@gmail.com/.
please let me know if the regex is not self explanatory.
Thomas Gummerer March 28, 2019, 9:30 p.m. UTC | #5
On 03/24, Kapil Jain wrote:
> On Sun, Mar 24, 2019 at 2:49 PM Christian Couder
> <christian.couder@gmail.com> wrote:
> >
> > The test_language_driver() function used to test the regexps is
> > ...
> > GIT_TEST_CMP which is usually either "diff -u" or "diff -c".
> 
> Thanks.
> 
> please provide some insights on the regex mentioned below:

I had previously mentioned that this project was attempted already in
my email at [*1*].  Did you take a look at the thread I linked to
there, and the regex used?  I still feel like that previous experience
is something you could learn from.

But that said, I think your assumption in the other email that the
output should be

[-$TEST_DIRECTORY-]
{+$TEST_DIR+}

might not be correct.  The tests are using 'git diff
--word-diff=color', rather than 'git diff --word-diff=plain'.  Only
the latter would add the [- -] and {+ +} around the changed words,
while the former adds the color, which the tests are testing for.

*1*: https://public-inbox.org/git/20190315230515.GJ16414@hank.intra.tgummerer.com/

> +
> +PATTERNS("shell",
> +  /* Function Names */
> +  "([A-Za-z_][A-Za-z0-9_]*)[[:space:]]*\\([[:space:]]*\\)[[:space:]]*\\{",
> +  /* Words */
> +  "([$#@A-Za-z_\"\'][$#@A-Za-z0-9_\"\']*)"),
> +
> 
> reference mail:
> https://public-inbox.org/git/20190324084523.8744-1-jkapil.cs@gmail.com/.
> please let me know if the regex is not self explanatory.
Kapil Jain March 29, 2019, 12:13 p.m. UTC | #6
On Fri, Mar 29, 2019 at 3:00 AM Thomas Gummerer <t.gummerer@gmail.com> wrote:
>
>
> I had previously mentioned that this project was attempted already in
> my email at [*1*].  Did you take a look at the thread I linked to
> there, and the regex used?  I still feel like that previous experience
> is something you could learn from.

I saw it, and the regex i have used is a little different from that one.

> But that said, I think your assumption in the other email that the
> output should be
>
> [-$TEST_DIRECTORY-]
> {+$TEST_DIR+}
>
> might not be correct.  The tests are using 'git diff
> --word-diff=color', rather than 'git diff --word-diff=plain'.  Only
> the latter would add the [- -] and {+ +} around the changed words,
> while the former adds the color, which the tests are testing for.

This makes sense, i will write more tests for this.
Thomas Gummerer March 29, 2019, 7:07 p.m. UTC | #7
On 03/29, Kapil Jain wrote:
> On Fri, Mar 29, 2019 at 3:00 AM Thomas Gummerer <t.gummerer@gmail.com> wrote:
> >
> >
> > I had previously mentioned that this project was attempted already in
> > my email at [*1*].  Did you take a look at the thread I linked to
> > there, and the regex used?  I still feel like that previous experience
> > is something you could learn from.
> 
> I saw it, and the regex i have used is a little different from that one.

Right, so one thing you should definitely do is to compare the regex
there and the regex you have, and understand why there are differences
when they are trying to do the same thing.  Using that knowledge you
should be able to improve the regex in your patch as well.
diff mbox series

Patch

diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh
index 912df91226..74366e6826 100755
--- a/t/t4034-diff-words.sh
+++ b/t/t4034-diff-words.sh
@@ -314,6 +314,8 @@  test_language_driver php
 test_language_driver python
 test_language_driver ruby
 test_language_driver tex
+test_language_driver shell
+
 
 test_expect_success 'word-diff with diff.sbe' '
 	cat >expect <<-\EOF &&
diff --git a/t/t4034/shell/expect b/t/t4034/shell/expect
new file mode 100644
index 0000000000..f2f65e7a9b
--- /dev/null
+++ b/t/t4034/shell/expect
@@ -0,0 +1,6 @@ 
+<BOLD>diff --git a/pre b/post<RESET>
+<BOLD>index 2fc00ad..cd34305 100644<RESET>
+<BOLD>--- a/pre<RESET>
+<BOLD>+++ b/post<RESET>
+<CYAN>@@ -1 +1 @@<RESET>
+<RED>[-$TEST_DIRECTORY-]<RESET><GREEN>{+$TEST_DIR+}<RESET>
diff --git a/t/t4034/shell/post b/t/t4034/shell/post
new file mode 100644
index 0000000000..43a84e0188
--- /dev/null
+++ b/t/t4034/shell/post
@@ -0,0 +1 @@ 
+$TEST_DIR
diff --git a/t/t4034/shell/pre b/t/t4034/shell/pre
new file mode 100644
index 0000000000..32440f90b7
--- /dev/null
+++ b/t/t4034/shell/pre
@@ -0,0 +1 @@ 
+$TEST_DIRECTORY
diff --git a/userdiff.c b/userdiff.c
index 3a78fbf504..936447a0bc 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -158,6 +158,13 @@  PATTERNS("csharp",
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
 	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
+
+PATTERNS("shell",
+  /* Function Names */
+  "([A-Za-z_][A-Za-z0-9_]*)[[:space:]]*\\([[:space:]]*\\)[[:space:]]*\\{",
+  /* Words */
+  "([$#@A-Za-z_\"\'][$#@A-Za-z0-9_\"\']*)"),
+
 IPATTERN("css",
 	 "![:;][[:space:]]*$\n"
 	 "^[_a-z0-9].*$",