# bug: git format prints no final newline

2 messages from 2022-11-03 to 2022-11-03. Participants: Evan Benn, Jeff King.
Thread: https://gitlist.dev/t/58739

## Evan Benn, 2022-11-03 03:14

Subject: bug: git format prints no final newline
Message-ID: <CAKz_xw2X+eapmASqG7V=RXehh7=LN24m+MJPn-wx80oZAZHBnQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAKz_xw2X%2BeapmASqG7V%3DRXehh7%3DLN24m%2BMJPn-wx80oZAZHBnQ%40mail.gmail.com

```
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, 2022-11-03 04:43

Subject: Re: bug: git format prints no final newline
Message-ID: <Y2NG6u1TVdDBZAZE@coredump.intra.peff.net>
URL: https://gitlist.dev/e/Y2NG6u1TVdDBZAZE%40coredump.intra.peff.net
In-Reply-To: <CAKz_xw2X+eapmASqG7V=RXehh7=LN24m+MJPn-wx80oZAZHBnQ@mail.gmail.com>

```
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

```
