Re: [PATCH] diff --color-words -U0: fix the location of hunk headers
From: Markus Heidelberg <hidden>
Date: 2016-06-15 22:47:38
Johannes Schindelin, 29.10.2009:
quoted hunk ↗ jump to hunk
I would strongly prefer this fix instead of your 2/3 and 3/3. diff.c | 6 ++++++ t/t4034-diff-words.sh | 2 +- 2 files changed, 7 insertions(+), 1 deletions(-)diff --git a/diff.c b/diff.c index 51b5dbb..4eafaf5 100644 --- a/diff.c +++ b/diff.c@@ -656,6 +656,12 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) for (i = 0; i < len && line[i] == '@'; i++) ; if (2 <= i && i < len && line[i] == ' ') { + /* flush --color-words even for --unified=0 */ + if (ecbdata->diff_words && + (ecbdata->diff_words->minus.text.size || + ecbdata->diff_words->plus.text.size)) + diff_words_show(ecbdata->diff_words); + ecbdata->nparents = i - 1; len = sane_truncate_line(ecbdata, line, len); emit_line(ecbdata->file,
This seems to apply before commit b8d9c1a (diff.c: the builtin_diff() deals with only two-file comparison, 2009-09-03). Indeed my initial fix was in the same fashion:
@@ -772,6 +772,15 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) } if (line[0] == '@') { + if (ecbdata->diff_words) { + /* + * The content of the previous hunk, necessary for + * 0-context. + */ + if (ecbdata->diff_words->minus.text.size || + ecbdata->diff_words->plus.text.size) + diff_words_show(ecbdata->diff_words); + } len = sane_truncate_line(ecbdata, line, len); find_lno(line, ecbdata); emit_line(ecbdata->file,
But then I thought I should not put the diff output from --color-words into the block that deals with the hunk header, but save another place where diff_words_show() is called. Markus