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

[RFC/PATCH 00/17]

From
Stefan Beller <sbeller@google.com>
Date
Sep 13, 2016, 04:45 UTC
Message-ID
<20160913044613.1037-1-sbeller@google.com>

About a week ago, I started experimenting to add a new functionality to the diff machinery: We want to color moved lines differently! This will aid developers to review patches such as the patch "Move libified code from builtin/apply.c to apply.{c,h}" Or a smaller example:

    git show 11979b9
    

In the original patch series I just used the xdl diff machinery multiple times to obtain the output for a multi pass algorithm I need for this coloring. This was one of Junios main concerns (We have to rely on the xdl stuff to yield the same output in the two passes).

This brings in another approach:
 * run the xdl stuff only once
 * In case we do not ask for coloring moves, put it out immediately
   (small detour: we do not use fprintf/fputs directly but we channel
   all output through the emit_line_* interface)
 * When asking for coloring moves: buffer all its output for now.
   Feed the line by line into the move detection algorithm.
 * then output it all at once using the information from the move detection
   to recolor moves while outputting.
   
While viewing the output of 11979b9 again, I notice a small bug in the proposal,
but I'd rather be asking for review of the whole design approach.
   
Thanks,
Stefan
Stefan Beller (17):
  diff: move line ending check into emit_hunk_header
  diff: emit_{add, del, context}_line to increase {pre,post}image line
    count
  diff.c: drop tautologous condition in emit_line_0
  diff.c: factor out diff_flush_patch_all_file_pairs
  diff.c: emit_line_0 can handle no color setting
  diff.c: convert fn_out_consume to use emit_line_*
  diff.c: convert builtin_diff to use emit_line_*
  diff.c: convert emit_rewrite_diff to use emit_line_*
  diff.c: convert emit_rewrite_lines to use emit_line_*
  submodule.c: convert show_submodule_summary to use emit_line_fmt
  diff.c: convert emit_binary_diff_body to use emit_line_*
  diff.c: convert show_stats to use emit_line_*
  diff.c: convert word diffing to use emit_line_*
  diff.c: convert diff_flush to use emit_line_*
  diff.c: convert diff_summary to use emit_line_*
  diff: buffer output in emit_line_0
  diff.c: color moved lines differently
 Documentation/config.txt               |  12 +-
 Documentation/diff-options.txt         |   7 +
 contrib/completion/git-completion.bash |   2 +
 diff.c                                 | 666 +++++++++++++++++++++++----------
 diff.h                                 |  35 +-
 submodule.c                            |  42 +--
 submodule.h                            |   3 +-
 t/t4015-diff-whitespace.sh             | 229 ++++++++++++
 8 files changed, 760 insertions(+), 236 deletions(-)
-- 
2.10.0.21.g1da280f.dirty
Next: Stefan Beller
Message 1 of 28 in “[RFC/PATCH 00/17]”
  1. 00/17 Stefan Beller, Sep 13, 2016
  2. 01/17 diff: move line ending check into emit_hunk_headerStefan Beller, Sep 13, 2016
  3. René ScharfeSep 13, 2016
  4. Stefan BellerSep 13, 2016
  5. 02/17 diff: emit_{add, del, context}_line to increase {pre,post}image line countStefan Beller, Sep 13, 2016
  6. 03/17 diff.c: drop tautologous condition in emit_line_0Stefan Beller, Sep 13, 2016
  7. 04/17 diff.c: factor out diff_flush_patch_all_file_pairsStefan Beller, Sep 13, 2016
  8. 05/17 diff.c: emit_line_0 can handle no color settingStefan Beller, Sep 13, 2016
  9. Junio C HamanoSep 13, 2016
  10. 08/17 diff.c: convert emit_rewrite_diff to use emit_line_*Stefan Beller, Sep 13, 2016
  11. 07/17 diff.c: convert builtin_diff to use emit_line_*Stefan Beller, Sep 13, 2016
  12. 06/17 diff.c: convert fn_out_consume to use emit_line_*Stefan Beller, Sep 13, 2016
  13. Junio C HamanoSep 13, 2016
  14. 09/17 diff.c: convert emit_rewrite_lines to use emit_line_*Stefan Beller, Sep 13, 2016
  15. 13/17 diff.c: convert word diffing to use emit_line_*Stefan Beller, Sep 13, 2016
  16. 12/17 diff.c: convert show_stats to use emit_line_*Stefan Beller, Sep 13, 2016
  17. 10/17 submodule.c: convert show_submodule_summary to use emit_line_fmtStefan Beller, Sep 13, 2016
  18. Junio C HamanoSep 13, 2016
  19. Stefan BellerSep 13, 2016
  20. 14/17 diff.c: convert diff_flush to use emit_line_*Stefan Beller, Sep 13, 2016
  21. 17/17 diff.c: color moved lines differentlyStefan Beller, Sep 13, 2016
  22. 11/17 diff.c: convert emit_binary_diff_body to use emit_line_*Stefan Beller, Sep 13, 2016
  23. 16/17 diff: buffer output in emit_line_0Stefan Beller, Sep 13, 2016
  24. Junio C HamanoSep 13, 2016
  25. Stefan BellerSep 13, 2016
  26. Junio C HamanoSep 13, 2016
  27. Stefan BellerSep 13, 2016
  28. 15/17 diff.c: convert diff_summary to use emit_line_*Stefan Beller, Sep 13, 2016

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.