threads / bug / 58739

bug: git format prints no final newline

Subject: bug: git format prints no final newline

## tl;dr

2 messages between Nov 3, 2022 and Nov 3, 2022.

replies: 1people: 2as markdown or json

Evan Benn· Nov 3, 2022, 03:14 UTC · lore
This command omits the final newline:
git log --format=format:"%H"
check with: `| tail | cat -A`
This command doesn't, but there is an extra newline between each line of course:
git log --format=format:"%H%n"

This seems to be intentional in the code, a newline is printed before each line except the first:

https://github.com/git/git/blob/master/log-tree.c#L664

It seems more correct to print a newline after every line, but the code is very hairy so I am keen to get any feedback before attempting that.

Thanks
Jeff King· Nov 3, 2022, 04:43 UTC · re: Evan Benn · lore

Re: bug: git format prints no final newline

On Thu, Nov 03, 2022 at 02:14:37PM +1100, Evan Benn wrote:
> This command omits the final newline:
> 
> git log --format=format:"%H"

This is the intended behavior. See the section on "tformat:" in "git help log", and the discussion of "terminator" vs "separator" semantics.

The "separator" semantics are helpful for most multiline formats (where your separator is probably a blank line, and you don't want an extra one at the end). Terminator is more useful for one-line outputs.

I think one could argue that the terminator one is what most people want and would be a better default, but "format" is the way it is for historical compatibility. If you use the do-what-I-mean form of:

  git log --format=%H

then it defaults to tformat (notice no "format:" or "tformat:" keyword; we infer from the presence of "%H" in the name that it's a custom format, and that is what defaults to tformat).

-Peff

← back to recent threads