Re: Getting an odd diff
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Apr 30, 2022, 07:16 UTC
- Message-ID
- <1c11f705-596f-9e51-8017-2b59cac5f19d@kdbg.org>
- In-Reply-To
- <CAKepmahKwpe_YVrVrS0L3hMAu44W8VgbmvHY2LRpbrC6CQ0AKQ@mail.gmail.com>
Am 29.04.22 um 14:33 schrieb Jack Adrian Zappa:
Show 54 quoted lines
> 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?)?'
> -pI 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