v5: * removed the color passing to the submodule to make the tests pass again. * fixed an indentation issue that was introduced from v3 -> v4. * I merged it with origin/next and tests pass here. Thanks, Stefan diff to v4: diff --git a/diff.c b/diff.c index 23e70d348e..1292d3c4ad 100644 --- a/diff.c +++ b/diff.c @@ -751,7 +751,7 @@ static void mark_color_as_moved(struct diff_options *o, } static void emit_diff_line(struct diff_options *o, - struct diff_line *e) + struct diff_line *e) { const char *ws; int has_trailing_newline, has_trailing_carriage_return; @@ -804,7 +804,7 @@ static void emit_diff_line(struct diff_options *o, } static void append_diff_line(struct diff_options *o, - struct diff_line *e) + struct diff_line *e) { struct diff_line *f; ALLOC_GROW(o->line_buffer, diff --git a/submodule.c b/submodule.c index 428c996c97..19c63197fb 100644 --- a/submodule.c +++ b/submodule.c @@ -550,8 +550,6 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path, /* TODO: other options may need to be passed here. */ argv_array_push(&cp.args, "diff"); - if (o->use_color) - argv_array_push(&cp.args, "--color=always"); argv_array_pushf(&cp.args, "--line-prefix=%s", diff_line_prefix(o)); if (DIFF_OPT_TST(o, REVERSE_DIFF)) { argv_array_pushf(&cp.args, "--src-prefix=%s%s/", v4: * interdiff to v3 (what is currently origin/sb/diff-color-move) below. * renamed the "buffered_patch_line" to "diff_line". Originally I planned to not carry the "line" part as it can be a piece of a line as well. But for the intended functionality it is best to keep the name. If we'd want to add more functionality to say have a move detection for words as well, we'd rename the struct to have a better name then. For now diff_line is the best. (Thanks Jonathan Nieder!) * tests to demonstrate it doesn't mess with --color-words as well as submodules. (Thanks Jonathan Tan!) * added in the statics (Thanks Ramsay!) * smaller scope for the hashmaps (Thanks Jonathan Tan!) * some commit messages were updated, prior patch 4-7 is squashed into one (Thanks Jonathan Tan!) * the tests added revealed an actual fault: now that the submodule process is not attached to a dupe of our stdout, it would stop coloring the output. We need to pass on use-color explicitly. * updated the NEEDSWORK comment in the second last patch. Thanks for bearing, Stefan v3: * see interdiff below. * fixing one invalid computation (Thanks Junio!) * I reasoned more about submodule and word diffing, see the commit message of the last patch: A note on the options '--submodule=diff' and '--color-words/--word-diff': In the conversion to use emit_line in the prior patches both submodules as well as word diff output carefully chose to call emit_line with sign=0. All output with sign=0 is ignored for move detection purposes in this patch, such that no weird looking output will be generated for these cases. This leads to another thought: We could pass on '--color-moved' to submodules such that they color up moved lines for themselves. If we'd do so only line moves within a repository boundary are marked up. * better name for emit_line outside of diff.[ch] v2: * emit_line now takes an argument that indicates if we want it to emit the line prefix as well. This should allow for a more faithful refactoring in the beginning. (Thanks Jonathan!) * fixed memleaks (Thanks Brandon!) * "git -c color.moved=true log -p" works now! (Thanks Jeff) * interdiff below, though it is large. * less intrusive than v1 (Thanks Jonathan!) v1: For details on *why* see the commit message of the last commit. The first five patches are slight refactorings to get into good shape, the next patches are funneling all output through emit_line_*. The second last patch introduces an option to buffer up all output before printing, and then the last patch can color up moved lines of code. Any feedback welcome. Thanks, Stefan Stefan Beller (17): diff: readability fix diff: move line ending check into emit_hunk_header diff.c: factor out diff_flush_patch_all_file_pairs diff: introduce more flexible emit function 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.c: emit_line includes whitespace highlighting diff: buffer all output if asked to diff.c: color moved lines differently Documentation/config.txt | 14 +- diff.c | 858 +++++++++++++++++++++++++++++++++------------ diff.h | 59 +++- submodule.c | 87 ++--- submodule.h | 9 +- t/t4015-diff-whitespace.sh | 267 ++++++++++++++ 6 files changed, 1016 insertions(+), 278 deletions(-) -- 2.13.0.18.g7d86cc8ba0