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

Re: [PATCH] log-tree: use custom line terminator in line termination mode

From
Junio C Hamano <gitster@pobox.com>
Date
May 1, 2012, 16:12 UTC
Message-ID
<7v1un3c23p.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20120501085649.GD4998@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 35 quoted lines
> On Mon, Apr 30, 2012 at 12:36:07PM -0700, Junio C Hamano wrote:
>
>> Jan Krüger <jk@jk.gs> writes:
>> 
>> > When using a custom format in line termination mode (as opposed to line
>> > separation mode), the configured line terminator is not used, so things
>> > like "git log --pretty=tformat:%H -z" do not work properly.
>> >
>> > Make it use the line terminator the user ordered.
>> >
>> > Signed-off-by: Jan Krüger <jk@jk.gs>
>> > ---
>> >  log-tree.c |    2 +-
>> >  1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > diff --git a/log-tree.c b/log-tree.c
>> > index 34c49e7..44f0268 100644
>> > --- a/log-tree.c
>> > +++ b/log-tree.c
>> > @@ -682,7 +682,7 @@ void show_log(struct rev_info *opt)
>> >  	if (opt->use_terminator) {
>> >  		if (!opt->missing_newline)
>> >  			graph_show_padding(opt->graph);
>> > -		putchar('\n');
>> > +		putchar(opt->diffopt.line_termination);
>> >  	}
>> >  
>> >  	strbuf_release(&msgbuf);
>> 
>> Looks sensible.  Perhaps we would want to add a test?
>
> Hmm. This came up before, and the issue is (or can be) slightly more
> complex:
>
>   http://thread.gmane.org/gmane.comp.version-control.git/122478/focus=122568

Yeah, the test given completely forgets about "log -p" case, as you said in the above:

    But we can't just modify that to use the specified line terminator,
    because sometimes it is acting as a separator between commit message and
    diff, and sometimes it is acting as the terminator of the whole record.

So the patch is not quite right for the "log -p -z" (or "log --stat -z") case.

The correct output would have NUL after each commit, so "-z --format=%s" would have a single-liner subject with the line-terminating LF replaced with NUL, and "-p/--stat -z --format=%s" would have a single-liner subject with its line-terminating LF, followed by the diff/diffstat in which the terminating LF of the last line is replaced with NUL, but to be consistent with what "-p/--stat -z --pretty=format:%s" does, I think it is OK to append NUL to the diff/diffstat part instead of replacing its last LF with NUL.

Previous: Jeff KingNext: Junio C Hamano
Message 15 of 17 in “git log -z still outputting newlines?”
  1. Randal L. SchwartzApr 30, 2012
  2. Andreas SchwabApr 30, 2012
  3. Thomas RastApr 30, 2012
  4. log-tree: use custom line terminator in line termination modeJan Krüger, Apr 30, 2012
  5. Junio C HamanoApr 30, 2012
  6. log-tree: use custom line terminator in line termination modeJan Krüger, Apr 30, 2012
  7. Junio C HamanoApr 30, 2012
  8. Jan KrügerApr 30, 2012
  9. Andreas SchwabMay 1, 2012
  10. Junio C HamanoMay 1, 2012
  11. Andreas SchwabMay 1, 2012
  12. Randal L. SchwartzMay 1, 2012
  13. Junio C HamanoMay 1, 2012
  14. Jeff KingMay 1, 2012
  15. Junio C HamanoMay 1, 2012
  16. Junio C HamanoMay 1, 2012
  17. Junio C HamanoMay 1, 2012

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.