Re: Getting an odd diff

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 29.04.22 um 14:33 schrieb Jack Adrian Zappa:
> So, I have a regex to select words so that I can focus on the actual
> changes.  But then I noticed that it did something weird.  It grouped
> some parenthesis with another word.  I generated a minimal example for
> that line and it was reproducible.
> 
> Before:
> var result = ((res.State == ResultState.Succeeded) &&
> string.IsNullOrEmpty(res.ErrorCode) )? (byte)0 : (byte)1;
> 
> After:
> var result = res.State == ResultState.Succeeded ? (byte)0 : (byte)1;
> 
> Diff:
> $ git diff2 --no-index b a
> warning: LF will be replaced by CRLF in b.
> The file will have its original line endings in your working directory
> warning: LF will be replaced by CRLF in a.
> The file will have its original line endings in your working directory
> diff --git a/b b/a
> index 4e3604a8e..619d21e4e 100644
> --- a/b
> +++ b/a
> @@ -1 +1 @@
> var result = [-((res-]{+res+}.State == ResultState.Succeeded[-) &&
> string.IsNullOrEmpty(res.ErrorCode) )-] ? (byte)0 : (byte)1;
> 
> I tried to make a smaller example and it didn't cause the issue.
> 
> Before:
> var abc = ((xyz.Stuff == other_stuff) && stuff.yay(question) ? yes : no;
> 
> After:
> var abc = xyz.Stuff == other_stuff ? yes : no;
> 
> Diff:
> $ git diff2 --no-index b a
> warning: LF will be replaced by CRLF in b.
> The file will have its original line endings in your working directory
> warning: LF will be replaced by CRLF in a.
> The file will have its original line endings in your working directory
> diff --git a/b b/a
> index df18ca34e..1024d6b68 100644
> --- a/b
> +++ b/a
> @@ -1 +1 @@
> var abc =[-((-] xyz.Stuff == other_stuff[-) && stuff.yay(question)-] ? yes : no;
> 
> So, my question is, what's going on here?
> 
> The alias is as follows:
>      diff2 = diff --color=always --ignore-space-change
> '--word-diff-regex=((\\r\\n?|\\n\\r?)[\\t
> ]*)?([a-zA-Z_][a-zA-Z_0-9]*|0([xX]([0-9][a-fA-F])+|[0-7]+|[bB][01]+)|[1-9][0-9]*(\\.[0-9]+)?([eE][0-9]+|[pP][0-9a-fA-F])?|\\S)(\\r\\n?|\\n\\r?)?'
> -p

I am a bit reluctant to diagnose what exactly is happening here because
your word regex is outside the design space. It is definitely not a good
idea to declare whitespace and even line breaks as part of a word. And
in fact, when you remove the trailing (\\r\\n?|\\n\\r?)?, you get a more
sensible word diff:

var result =[-((-] resx.State == ResultState.Succeeded[-) &&-]
[-string.IsNullOrEmpty(res.ErrorCode) )-] ? (byte)0 : (byte)1;

But if I were you, I would remove all subexpressions that match any form
of whitespace.

-- Hannes



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux