threads / bug / 8683

Possible BUG in 'git log -z' last commit is not '\0' terminated

Subject: Possible BUG in 'git log -z' last commit is not '\0' terminated

## tl;dr

4 messages between Jun 22, 2007 and Jun 23, 2007.

replies: 3people: 3as markdown or json

Junio C Hamano· Jun 22, 2007, 21:29 UTC · re: Marco Costalba · lore

Re: Possible BUG in 'git log -z' last commit is not '\0' terminated

I am a bit busy right now and do not have time to dig into this, but I suspect the LF you are seeing at the end belongs to the commit log of the last entry, as I think -z is not about termination but separation.

Linus Torvalds· Jun 22, 2007, 21:56 UTC · re: Marco Costalba · lore

Re: Possible BUG in 'git log -z' last commit is not '\0' terminated

On Fri, 22 Jun 2007, Marco Costalba wrote:
>
> It seems '-z' option is not honoured by the last revision printed that
> is just '\n' terminated.
It's not a bug - it's by design.

What the -z option does is to replace the normal "\n" that delineates commits from each other with a "\0".

And we only put that delimeter in *between* commits, not *after* commits. The reason? It's prettier. Do a

	git log -1

to get a single commit, and notice how we do *not* add an empty line at the end (or beginning), and compare that to

	git log -2
that shows two commits, and has an empty line in *between*.

Now, add the "-z" flag, and notice how that empty line is now replaced by a "\0" character instead.

So you should think of the "\0" as being a delimeter that goes between commits, not something that "ends" the commit. It's not a "end of record" thing, it's a "between records" thing.

		Linus
Marco Costalba· Jun 23, 2007, 05:51 UTC · re: Linus Torvalds · lore

Re: Possible BUG in 'git log -z' last commit is not '\0' terminated

On 6/22/07, Linus Torvalds <torvalds@linux-foundation.org> wrote:
Show 5 quoted lines
>
> So you should think of the "\0" as being a delimeter that goes between
> commits, not something that "ends" the commit. It's not a "end of record"
> thing, it's a "between records" thing.
>
Thanks for explanation.
Interesting enough git-dif-tree with -z, documented as
"-z  \0 line termination on output"
has a different behaviour, with and without -p option:
git diff-tree -z HEAD ---> a '\0' is printed at the end
git diff-tree -z -p HEAD --> No '\0' is printed.

I suppose 'git log' passes '-z' to 'git diff-tree' because no documentation exsists in 'git log' man page.

Thanks Marco

BTW git-rev-list --header uses '\0' differently (appends to each record), but that's another story.

← back to recent threads