threads / bug / 36328

Bug in git-diff output

Subject: Bug in git-diff output

## tl;dr

6 messages between Apr 1, 2014 and Apr 3, 2014.

replies: 5people: 4as markdown or json

rocketscienc01100101 .· Apr 1, 2014, 10:49 UTC · lore

I tried to get a diff between HEAD and the current version of my project, so I did "git diff".

It's a web project with a CSS file that contains the following CSS rule:
a[href^=tel] {
    color:inherit;
    text-decoration:none;
}

Now, whenever I do "git diff", it will always show the a[href^=tel] part and mess up the output, even when I didn't change anything near that line. The problem is easily reproducable in a newly created repository.

git --version git version 1.9.1

Jeff King· Apr 1, 2014, 11:46 UTC · re: rocketscienc01100101 . · lore

Re: Bug in git-diff output

On Tue, Apr 01, 2014 at 12:49:00PM +0200, rocketscienc01100101 . wrote:
> I tried to get a diff between HEAD and the current version of my
> project, so I did "git diff".

That actually diffs between the index and the working tree, but if you haven't used "git add" to add any changes, the index content is the same as HEAD.

Show 11 quoted lines
> It's a web project with a CSS file that contains the following CSS rule:
> 
> a[href^=tel] {
>     color:inherit;
>     text-decoration:none;
> }
> 
> Now, whenever I do "git diff", it will always show the a[href^=tel]
> part and mess up the output, even when I didn't change anything near
> that line. The problem is easily reproducable in a newly created
> repository.

I don't understand what you mean here by "mess up the output". Can you show us an example (and tell us what you expected to see)?

-Peff
rocketscienc01100101 .· Apr 2, 2014, 10:59 UTC · re: rocketscienc01100101 . · lore

Re: Bug in git-diff output

On Tue, Apr 1, 2014 at 12:49 PM, rocketscienc01100101 . <rocketscienc01100101@gmail.com> wrote:

Show 17 quoted lines
> I tried to get a diff between HEAD and the current version of my
> project, so I did "git diff".
>
> It's a web project with a CSS file that contains the following CSS rule:
>
> a[href^=tel] {
>     color:inherit;
>     text-decoration:none;
> }
>
> Now, whenever I do "git diff", it will always show the a[href^=tel]
> part and mess up the output, even when I didn't change anything near
> that line. The problem is easily reproducable in a newly created
> repository.
>
> git --version
> git version 1.9.1
rocketscienc01100101 .· Apr 2, 2014, 11:05 UTC · re: rocketscienc01100101 . · lore

Re: Bug in git-diff output

http://i.imgur.com/BoJSjm9.png

Here's a screenshot that shows the problem. There's always a misplaced line in the output (most of the time a[href^=tel] { }), no matter where in the file the changes are. Sometimes it's even in the wrong position, above the @@ numbers.

I'd naturally expect the a[href^=tel] part to not show up at all unless I make changes there.

On Tue, Apr 1, 2014 at 12:49 PM, rocketscienc01100101 . <rocketscienc01100101@gmail.com> wrote:

Show 17 quoted lines
> I tried to get a diff between HEAD and the current version of my
> project, so I did "git diff".
>
> It's a web project with a CSS file that contains the following CSS rule:
>
> a[href^=tel] {
>     color:inherit;
>     text-decoration:none;
> }
>
> Now, whenever I do "git diff", it will always show the a[href^=tel]
> part and mess up the output, even when I didn't change anything near
> that line. The problem is easily reproducable in a newly created
> repository.
>
> git --version
> git version 1.9.1
Matthieu Moy· Apr 2, 2014, 12:09 UTC · re: rocketscienc01100101 . · lore

Re: Bug in git-diff output

"rocketscienc01100101 ." <rocketscienc01100101@gmail.com> writes:
> http://i.imgur.com/BoJSjm9.png
>
> Here's a screenshot that shows the problem.
(better cut-and-paste the text than sending a PNG image)
> There's always a misplaced line in the output (most of the time
> a[href^=tel] { }), no matter where in the file the changes are.

The part after the @@ are ignored by patch tools. They are here just for convenience. They are a guess of what the patch hunk belongs to. For C/Java/Ada/... programs, it's the function name. Git does not know about CSS syntax, so it guesses wrong (last line starting with a letter I guess, not sure exactly what happens when Git doesn't know the syntax).

But don't worry, these are juste hints for human, they are harmless.
> Sometimes it's even in the wrong position, above the @@ numbers.
That is strange. Do you have a way to reproduce this?
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Junio C Hamano· Apr 3, 2014, 18:10 UTC · re: Matthieu Moy · lore

Re: Bug in git-diff output

Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:
Show 16 quoted lines
> "rocketscienc01100101 ." <rocketscienc01100101@gmail.com> writes:
>
>> http://i.imgur.com/BoJSjm9.png
>>
>> Here's a screenshot that shows the problem.
>
> (better cut-and-paste the text than sending a PNG image)
>
>> There's always a misplaced line in the output (most of the time
>> a[href^=tel] { }), no matter where in the file the changes are.
>
> The part after the @@ are ignored by patch tools. They are here just for
> convenience. They are a guess of what the patch hunk belongs to. For
> C/Java/Ada/... programs, it's the function name. Git does not know about
> CSS syntax, so it guesses wrong (last line starting with a letter I
> guess, not sure exactly what happens when Git doesn't know the syntax).
Ask "git grep -A14 'long def_ff' xdiff/" for details ;-)

This was an attempt to be compatible with stock behaviour of GNU diff: a line that begins with an alpha, _ or $.

>> Sometimes it's even in the wrong position, above the @@ numbers.
>
> That is strange. Do you have a way to reproduce this?

That indeed is unusual. If the payload that was identified by the find_func function has a funny escape sequence or something, you may get funkiness like that in the output on the terminal, which we may want to take notice and sanitize in xdl_emit_hunk_hdr(), instead of straight memcpy() there, but I do not see how that would be an issue in a css source.

← back to recent threads