Éric Alber
2014-10-23 18:54:15 UTC
Hi,
I'm currently developing a local web based GUI for git in the same
fashion as mercurial's 'hg serve': git-webui
(https://github.com/alberthier/git-webui)
I tried to add word-diff highlighting in my diff visualization panels.
I used the '--word-diff=porcelain' option of 'git show' and 'git
diff'.
Unfortunately I ran into an issue so I want to make sure I understand
properly the format
Here is how I interpret this output:
- A line of the diff no longer corresponds to a line in the source
file. A line of the source file, is represented between two leading
'~' markers
- A line starting with a '+' or '-' is respectively an added or
removed line fragment
- A line starting with a ' ' (space) is an unchanged line fragment
The problem is visible with the git-webui repository itself:
git clone https://github.com/alberthier/git-webui
git show --word-diff=porcelain ed934a7 # This is the head
of the 'word-diff' branch
# search for the first occurrence of 'fragment'
In the source code, several lines have been replaced with the
following single line:
var fragment = line.substr(1);
But in the diff, 'fragment' and 'line.substr(1);' don't apprear in the
same '~' block.
I get:
~
var
-pre
+fragment
=
-$('<pre class="diff-view-line">').appendTo(view)[0];
~
[ some removed lines....]
~
- }
+line.substr(1);
~
By reading this output, it looks like 'var fragment = ' and
'line.substr(1);' aren't on the same line.
I would have expected:
~
var
-pre
+fragment
=
-$('<pre class="diff-view-line">').appendTo(view)[0];
+line.substr(1);
~
[ some removed lines....]
Is there something I miss or is this a bug of git's word-diff algorithm ?
Regards,
Eric
I'm currently developing a local web based GUI for git in the same
fashion as mercurial's 'hg serve': git-webui
(https://github.com/alberthier/git-webui)
I tried to add word-diff highlighting in my diff visualization panels.
I used the '--word-diff=porcelain' option of 'git show' and 'git
diff'.
Unfortunately I ran into an issue so I want to make sure I understand
properly the format
Here is how I interpret this output:
- A line of the diff no longer corresponds to a line in the source
file. A line of the source file, is represented between two leading
'~' markers
- A line starting with a '+' or '-' is respectively an added or
removed line fragment
- A line starting with a ' ' (space) is an unchanged line fragment
The problem is visible with the git-webui repository itself:
git clone https://github.com/alberthier/git-webui
git show --word-diff=porcelain ed934a7 # This is the head
of the 'word-diff' branch
# search for the first occurrence of 'fragment'
In the source code, several lines have been replaced with the
following single line:
var fragment = line.substr(1);
But in the diff, 'fragment' and 'line.substr(1);' don't apprear in the
same '~' block.
I get:
~
var
-pre
+fragment
=
-$('<pre class="diff-view-line">').appendTo(view)[0];
~
[ some removed lines....]
~
- }
+line.substr(1);
~
By reading this output, it looks like 'var fragment = ' and
'line.substr(1);' aren't on the same line.
I would have expected:
~
var
-pre
+fragment
=
-$('<pre class="diff-view-line">').appendTo(view)[0];
+line.substr(1);
~
[ some removed lines....]
Is there something I miss or is this a bug of git's word-diff algorithm ?
Regards,
Eric