From: René Scharfe Date: Tue, 13 Sep 2016 14:42:52 GMT Subject: Re: [RFC/PATCH 01/17] diff: move line ending check into emit_hunk_header Message-ID: <848f36c9-4ac9-5316-1143-c47b48790847@web.de> In-Reply-To: <20160913044613.1037-2-sbeller@google.com> Am 13.09.2016 um 06:45 schrieb Stefan Beller: > In a later patch, I want to propose an option to detect&color > moved lines in a diff, which cannot be done in a one-pass over > the diff. Instead we need to go over the whole diff twice, > because we cannot detect the first line of the two corresponding > lines (+ and -) that got moved. > > So to prepare the diff machinery for two pass algorithms > (i.e. buffer it all up and then operate on the result), > move all emissions to places, such that the only emitting > function is emit_line_0. > > This patch moves code that is conceptually part of > emit_hunk_header, but was using output in fn_out_consume, > back to emit_hunk_header. > > Signed-off-by: Stefan Beller > --- > diff.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/diff.c b/diff.c > index cc8e812..aa50b2d 100644 > --- a/diff.c > +++ b/diff.c > @@ -610,6 +610,9 @@ static void emit_hunk_header(struct emit_callback *ecbdata, > } > > strbuf_add(&msgbuf, line + len, org_len - len); > + if (line[org_len - 1] != '\n') > + strbuf_addch(&msgbuf, '\n'); > + Using strbuf_complete_line() would be nicer. > emit_line(ecbdata->opt, "", "", msgbuf.buf, msgbuf.len); > strbuf_release(&msgbuf); > } > @@ -1247,8 +1250,6 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) > len = sane_truncate_line(ecbdata, line, len); > find_lno(line, ecbdata); > emit_hunk_header(ecbdata, line, len); > - if (line[len-1] != '\n') > - putc('\n', o->file); > return; > } > >