git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Improve contrib/diff-highlight to highlight unevenly-sized hunks

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 19, 2015, 04:49 UTC
Message-ID
<xmqqmvzwb8vk.fsf@gitster.dls.corp.google.com>
In-Reply-To
<20150619035408.GA23679@peff.net>
Jeff King <peff@peff.net> writes:
> ... I think you could also argue that
> because of whitespace-highlighting, colorized diffs are fundamentally
> going to have colors intermingled with the content and should not be
> parsed this way.

Painting of whitespace breakages is asymmetric [*1*]. If you change something on a badly indented line without fixing the indentation, e.g.

	-<SP><TAB>hello-world
        +<SP><TAB>hello-people
only the space-before-tab on the latter line is painted.

For the purpose of your diff highlighting, however, you would want to treat the leading "<SP><TAB>hello-" on preimage and postimage lines as unchanged.

Which means that you shouldn't be reading a colored output without ignoring the color-control sequences.

So I think you arrived at the correct conclusion.
> All the more reason to try to move this inside diff.c, I guess.
That too, probably.

If we were to do this, I think it may make sense to separate the logic to compute which span of the string need to be painted in what color and the routine to actually emit the colored output. That is, instead of letting ws-check-emit to decide which part should be in what color _and_ emitting the result, we should have a helper that reads <line, len>, and give us an array of spans to flag as whitespace violation. Then an optional diff-highlight code would scan the same <line, len> (or a collection of <line, len>) without getting confused by the whitespace errors and annotate the spans to be highlighted. After all that happens, the output routine would coalesce the spans and produce colored output.

Or something like that ;-)
[Footnote]

*1* We recently added a knob to allow us paint them on preimage and common lines, too, but that is not the default.

Previous: Jeff KingNext: Jeff King
Message 12 of 20 in “Improve contrib/diff-highlight to highlight unevenly-sized hunks”
  1. Improve contrib/diff-highlight to highlight unevenly-sized hunksPatrick Palka, Jun 15, 2015
  2. Junio C HamanoJun 18, 2015
  3. Patrick PalkaJun 18, 2015
  4. Junio C HamanoJun 18, 2015
  5. Jeff KingJun 18, 2015
  6. Patrick PalkaJun 18, 2015
  7. Jeff KingJun 18, 2015
  8. Jeff KingJun 18, 2015
  9. Junio C HamanoJun 18, 2015
  10. Patrick PalkaJun 18, 2015
  11. Jeff KingJun 19, 2015
  12. Junio C HamanoJun 19, 2015
  13. Jeff KingJun 19, 2015
  14. Jeff KingJun 19, 2015
  15. Jeff KingJun 19, 2015
  16. Junio C HamanoJun 19, 2015
  17. Patrick PalkaJun 18, 2015
  18. Patrick PalkaJun 18, 2015
  19. Jeff KingJun 18, 2015
  20. Patrick PalkaJun 18, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.