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

4 messages from 2007-06-22 to 2007-06-23. Participants: Marco Costalba, Junio C Hamano, Linus Torvalds.
Thread: https://gitlist.dev/t/8683

## Marco Costalba, 2007-06-22 19:27

Subject: Possible BUG in 'git log -z' last commit is not '\0' terminated
Message-ID: <e5bfff550706221227x4b785698taabfa7572bf8204b@mail.gmail.com>
URL: https://gitlist.dev/e/e5bfff550706221227x4b785698taabfa7572bf8204b%40mail.gmail.com

```
It seems '-z' option is not honoured by the last revision printed that
is just '\n' terminated.

Thanks
Marco

```

## Junio C Hamano, 2007-06-22 21:29

Subject: Re: Possible BUG in 'git log -z' last commit is not '\0' terminated
Message-ID: <7vlkebada8.fsf@assigned-by-dhcp.pobox.com>
URL: https://gitlist.dev/e/7vlkebada8.fsf%40assigned-by-dhcp.pobox.com
In-Reply-To: <e5bfff550706221227x4b785698taabfa7572bf8204b@mail.gmail.com>

```
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, 2007-06-22 21:56

Subject: Re: Possible BUG in 'git log -z' last commit is not '\0' terminated
Message-ID: <alpine.LFD.0.98.0706221451570.3593@woody.linux-foundation.org>
URL: https://gitlist.dev/e/alpine.LFD.0.98.0706221451570.3593%40woody.linux-foundation.org
In-Reply-To: <e5bfff550706221227x4b785698taabfa7572bf8204b@mail.gmail.com>

```


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, 2007-06-23 05:51

Subject: Re: Possible BUG in 'git log -z' last commit is not '\0' terminated
Message-ID: <e5bfff550706222251kdc6ccb4s6caf0195682ab727@mail.gmail.com>
URL: https://gitlist.dev/e/e5bfff550706222251kdc6ccb4s6caf0195682ab727%40mail.gmail.com
In-Reply-To: <alpine.LFD.0.98.0706221451570.3593@woody.linux-foundation.org>

```
On 6/22/07, Linus Torvalds <torvalds@linux-foundation.org> wrote:
>
> 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.

```
