threads / discuss / 45525

Microproject | Add more builtin patterns for userdiff

Subject: Microproject | Add more builtin patterns for userdiff

## tl;dr

7 messages between Mar 28, 2017 and Mar 29, 2017.

replies: 6people: 3as markdown or json

Pickfire· Mar 28, 2017, 10:46 UTC · lore

While I was working buildins shell patterns for user diffs. I noticed that the tests t4034 passes but I can reproduce it manually with:

    mkdir cpp/ && cd cpp/ && git init
    cat > pre <<EOF
    Foo():x(0&&1){}
    cout<<"Hello World!\n"<<endl;
    1 -1e10 0xabcdef 'x'
    [a] a->b a.b
    !a ~a a++ a-- a*b a&b
    a*b a/b a%b
    a+b a-b
    a<<b a>>b
    a<b a<=b a>b a>=b
    a==b a!=b
    a&b
    a^b
    a|b
    a&&b
    a||b
    a?b:z
    a=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a^=b a|=b
    a,y
    a::b
    EOF
    cat > post <<EOF
    Foo() : x(0&42) { bar(x); }
    cout<<"Hello World?\n"<<endl;
    (1) (-1e10) (0xabcdef) 'y'
    [x] x->y x.y
    !x ~x x++ x-- x*y x&y
    x*y x/y x%y
    x+y x-y
    x<<y x>>y
    x<y x<=y x>y x>=y
    x==y x!=y
    x&y
    x^y
    x|y
    x&&y
    x||y
    x?y:z
    x=y x+=y x-=y x*=y x/=y x%=y x<<=y x>>=y x&=y x^=y x|=y
    x,y
    x::y
    EOF
    echo '* diff="cpp"' > .gitmodules
    git diff --no-index --color-words pre post > output
Surprisingly, it shows (which is very different from the expected output):

^[[1mdiff --git a/pre b/post^[[m ^[[1mindex 23d5c8a..7e8c026 100644^[[m ^[[1m--- a/pre^[[m ^[[1m+++ b/post^[[m ^[[36m@@ -1,19 +1,19 @@^[[m ^[[31mFoo():x(0&&1){}^[[m^[[32mFoo() : x(0&42) { bar(x); }^[[m cout<<"Hello ^[[31mWorld!\n"<<endl;^[[m ^[[31m1 -1e10 0xabcdef 'x'^[[m ^[[31m[a] a->b a.b^[[m ^[[31m!a ~a a++ a-- a*b a&b^[[m ^[[31ma*b a/b a%b^[[m ^[[31ma+b a-b^[[m ^[[31ma<<b a>>b^[[m ^[[31ma<b a<=b a>b a>=b^[[m ^[[31ma==b a!=b^[[m ^[[31ma&b^[[m ^[[31ma^b^[[m ^[[31ma|b^[[m ^[[31ma&&b^[[m ^[[31ma||b^[[m ^[[31ma?b:z^[[m ^[[31ma=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a^=b a|=b^[[m ^[[31ma,y^[[m ^[[31ma::b^[[m^[[32mWorld?\n"<<endl;^[[m ^[[32m(1) (-1e10) (0xabcdef) 'y'^[[m ^[[32m[x] x->y x.y^[[m ^[[32m!x ~x x++ x-- x*y x&y^[[m ^[[32mx*y x/y x%y^[[m ^[[32mx+y x-y^[[m ^[[32mx<<y x>>y^[[m ^[[32mx<y x<=y x>y x>=y^[[m ^[[32mx==y x!=y^[[m ^[[32mx&y^[[m ^[[32mx^y^[[m ^[[32mx|y^[[m ^[[32mx&&y^[[m ^[[32mx||y^[[m ^[[32mx?y:z^[[m ^[[32mx=y x+=y x-=y x*=y x/=y x%=y x<<=y x>>=y x&=y x^=y x|=y^[[m ^[[32mx,y^[[m ^[[32mx::y^[[m

Instead of:

<BOLD>diff --git a/pre b/post<RESET> <BOLD>index 23d5c8a..7e8c026 100644<RESET> <BOLD>--- a/pre<RESET> <BOLD>+++ b/post<RESET> <CYAN>@@ -1,19 +1,19 @@<RESET> Foo() : x(0<RED>&&1<RESET><GREEN>&42<RESET>) { <GREEN>bar(x);<RESET> } cout<<"Hello World<RED>!<RESET><GREEN>?<RESET>\n"<<endl; <GREEN>(<RESET>1<GREEN>) (<RESET>-1e10<GREEN>) (<RESET>0xabcdef<GREEN>)<RESET> '<RED>x<RESET><GREEN>y<RESET>' [<RED>a<RESET><GREEN>x<RESET>] <RED>a<RESET><GREEN>x<RESET>-><RED>b a<RESET><GREEN>y x<RESET>.<RED>b<RESET><GREEN>y<RESET> !<RED>a<RESET><GREEN>x<RESET> ~<RED>a a<RESET><GREEN>x x<RESET>++ <RED>a<RESET><GREEN>x<RESET>-- <RED>a<RESET><GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>&<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b a<RESET><GREEN>y x<RESET>%<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET><<<RED>b a<RESET><GREEN>y x<RESET>>><RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET><<RED>b a<RESET><GREEN>y x<RESET><=<RED>b a<RESET><GREEN>y x<RESET>><RED>b a<RESET><GREEN>y x<RESET>>=<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>==<RED>b a<RESET><GREEN>y x<RESET>!=<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>&<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>^<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>|<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>&&<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>||<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>?<RED>b<RESET><GREEN>y<RESET>:z <RED>a<RESET><GREEN>x<RESET>=<RED>b a<RESET><GREEN>y x<RESET>+=<RED>b a<RESET><GREEN>y x<RESET>-=<RED>b a<RESET><GREEN>y x<RESET>*=<RED>b a<RESET><GREEN>y x<RESET>/=<RED>b a<RESET><GREEN>y x<RESET>%=<RED>b a<RESET><GREEN>y x<RESET><<=<RED>b a<RESET><GREEN>y x<RESET>>>=<RED>b a<RESET><GREEN>y x<RESET>&=<RED>b a<RESET><GREEN>y x<RESET>^=<RED>b a<RESET><GREEN>y x<RESET>|=<RED>b<RESET> <RED>a<RESET><GREEN>y<RESET> <GREEN>x<RESET>,y <RED>a<RESET><GREEN>x<RESET>::<RED>b<RESET><GREEN>y<RESET>

That's does not just happens to cpp builtins, it happens to bibtex as well. Is it that I had missed some configuration since I have tested this on a few machines?

I have a workaround for that, which is to run log with --color-words=<regex> with regex from the userdiff.c, does it automatically use the builtins diff?

Jacob Keller· Mar 28, 2017, 12:31 UTC · re: Pickfire · lore

Re: Microproject | Add more builtin patterns for userdiff

On Tue, Mar 28, 2017 at 3:46 AM, Pickfire <pickfire@riseup.net> wrote:
Show 54 quoted lines
> While I was working buildins shell patterns for user diffs. I noticed that
> the tests t4034 passes but I can reproduce it manually with:
>
>     mkdir cpp/ && cd cpp/ && git init
>
>     cat > pre <<EOF
>     Foo():x(0&&1){}
>     cout<<"Hello World!\n"<<endl;
>     1 -1e10 0xabcdef 'x'
>     [a] a->b a.b
>     !a ~a a++ a-- a*b a&b
>     a*b a/b a%b
>     a+b a-b
>     a<<b a>>b
>     a<b a<=b a>b a>=b
>     a==b a!=b
>     a&b
>     a^b
>     a|b
>     a&&b
>     a||b
>     a?b:z
>     a=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a^=b a|=b
>     a,y
>     a::b
>     EOF
>
>     cat > post <<EOF
>     Foo() : x(0&42) { bar(x); }
>     cout<<"Hello World?\n"<<endl;
>     (1) (-1e10) (0xabcdef) 'y'
>     [x] x->y x.y
>     !x ~x x++ x-- x*y x&y
>     x*y x/y x%y
>     x+y x-y
>     x<<y x>>y
>     x<y x<=y x>y x>=y
>     x==y x!=y
>     x&y
>     x^y
>     x|y
>     x&&y
>     x||y
>     x?y:z
>     x=y x+=y x-=y x*=y x/=y x%=y x<<=y x>>=y x&=y x^=y x|=y
>     x,y
>     x::y
>     EOF
>
>     echo '* diff="cpp"' > .gitmodules
>     git diff --no-index --color-words pre post > output
>
> Surprisingly, it shows (which is very different from the expected output):
>

The diff test code uses "test_decode_color" function which decodes the color commands into human readable text. From the looks of it, you're trying to reproduce the test outside the test suite. However, you're not decoding the colors using the test library function, so it doesn't look right.

Thanks, Jake

Pickfire· Mar 28, 2017, 17:53 UTC · re: Jacob Keller · lore

Re: Re: Microproject | Add more builtin patterns for userdiff

Jacob Keller <jacob.keller@gmail.com> wrote:
Show 61 quoted lines
> On Tue, Mar 28, 2017 at 3:46 AM, Pickfire <pickfire@riseup.net> wrote:
> > While I was working buildins shell patterns for user diffs. I noticed that
> > the tests t4034 passes but I can reproduce it manually with:
> >
> >     mkdir cpp/ && cd cpp/ && git init
> >
> >     cat > pre <<EOF
> >     Foo():x(0&&1){}
> >     cout<<"Hello World!\n"<<endl;
> >     1 -1e10 0xabcdef 'x'
> >     [a] a->b a.b
> >     !a ~a a++ a-- a*b a&b
> >     a*b a/b a%b
> >     a+b a-b
> >     a<<b a>>b
> >     a<b a<=b a>b a>=b
> >     a==b a!=b
> >     a&b
> >     a^b
> >     a|b
> >     a&&b
> >     a||b
> >     a?b:z
> >     a=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a^=b a|=b
> >     a,y
> >     a::b
> >     EOF
> >
> >     cat > post <<EOF
> >     Foo() : x(0&42) { bar(x); }
> >     cout<<"Hello World?\n"<<endl;
> >     (1) (-1e10) (0xabcdef) 'y'
> >     [x] x->y x.y
> >     !x ~x x++ x-- x*y x&y
> >     x*y x/y x%y
> >     x+y x-y
> >     x<<y x>>y
> >     x<y x<=y x>y x>=y
> >     x==y x!=y
> >     x&y
> >     x^y
> >     x|y
> >     x&&y
> >     x||y
> >     x?y:z
> >     x=y x+=y x-=y x*=y x/=y x%=y x<<=y x>>=y x&=y x^=y x|=y
> >     x,y
> >     x::y
> >     EOF
> >
> >     echo '* diff="cpp"' > .gitmodules
> >     git diff --no-index --color-words pre post > output
> >
> > Surprisingly, it shows (which is very different from the expected output):
> >
> 
> The diff test code uses "test_decode_color" function which decodes the
> color commands into human readable text. From the looks of it, you're
> trying to reproduce the test outside the test suite. However, you're
> not decoding the colors using the test library function, so it doesn't
> look right.

Yes, I can't reproduce it outside the test suite. I have added the builtin and yet the test fails. test_decode_color gets same output as expect but still it fails, should I send in the patch?

Jacob Keller· Mar 28, 2017, 18:10 UTC · re: Pickfire · lore

Re: Re: Microproject | Add more builtin patterns for userdiff

On Tue, Mar 28, 2017 at 10:53 AM, Pickfire <pickfire@riseup.net> wrote:
>
> Yes, I can't reproduce it outside the test suite. I have added the builtin
> and yet the test fails. test_decode_color gets same output as expect but
> still it fails, should I send in the patch?

You also need to ensure you have the exact same color settings as used by the test scripts.

Thanks, Jake

Pickfire· Mar 29, 2017, 01:55 UTC · re: Jacob Keller · lore

Re: Re: Re: Microproject | Add more builtin patterns for userdiff

Jacob Keller <jacob.keller@gmail.com> wrote:
Show 11 quoted lines
> On Tue, Mar 28, 2017 at 10:53 AM, Pickfire <pickfire@riseup.net> wrote:
> >
> > Yes, I can't reproduce it outside the test suite. I have added the builtin
> > and yet the test fails. test_decode_color gets same output as expect but
> > still it fails, should I send in the patch?
> 
> You also need to ensure you have the exact same color settings as used
> by the test scripts.
> 
> Thanks,
> Jake
Yes, I used the same color, looks like the block that are failing is:
    test_must_fail git diff --no-index "$@" pre post >output
Stefan Beller· Mar 28, 2017, 18:11 UTC · re: Pickfire · lore

Re: Microproject | Add more builtin patterns for userdiff

On Tue, Mar 28, 2017 at 3:46 AM, Pickfire <pickfire@riseup.net> wrote:
>     EOF
>
>     echo '* diff="cpp"' > .gitmodules
Did you mean .gitattributes?
Pickfire· Mar 29, 2017, 01:54 UTC · re: Stefan Beller · lore

Re: Re: Microproject | Add more builtin patterns for userdiff

Stefan Beller <sbeller@google.com> wrote:
Show 7 quoted lines
> On Tue, Mar 28, 2017 at 3:46 AM, Pickfire <pickfire@riseup.net> wrote:
> 
> >     EOF
> >
> >     echo '* diff="cpp"' > .gitmodules
> 
> Did you mean .gitattributes?
Yeah, that's a spelling error.

← back to recent threads