# "git diff --stat" doesn't show added empty file

6 messages from 2009-01-12 to 2009-01-13. Participants: Ping Yin, Johannes Schindelin, Michael J Gruber, Linus Torvalds.
Thread: https://gitlist.dev/t/17108

## Ping Yin, 2009-01-12 03:36

Subject: "git diff --stat" doesn't show added empty file
Message-ID: <46dff0320901111936h6343e51fo94750d83e95743dc@mail.gmail.com>
URL: https://gitlist.dev/e/46dff0320901111936h6343e51fo94750d83e95743dc%40mail.gmail.com

```
$ git --version
git version 1.6.1.9.g97c34
$ mkdir test && cd test && git init && git commit --allow-empty -m
"Initial commit"
$ touch .gitignore && git add .gitignore && git commit -m "Add empty .gitignore"
$ git diff --stat HEAD^..
 0 files changed, 0 insertions(+), 0 deletions(-)

May be the following is better?

 .gitignore |    0 +
 1 files changed, 0 insertions(+), 0 deletions(-)

Ping Yin

```

## Johannes Schindelin, 2009-01-12 12:19

Subject: Re: "git diff --stat" doesn't show added empty file
Message-ID: <alpine.DEB.1.00.0901121319210.3586@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0901121319210.3586%40pacific.mpi-cbg.de
In-Reply-To: <46dff0320901111936h6343e51fo94750d83e95743dc@mail.gmail.com>

```
Hi,

On Mon, 12 Jan 2009, Ping Yin wrote:

> $ git --version
> git version 1.6.1.9.g97c34
> $ mkdir test && cd test && git init && git commit --allow-empty -m
> "Initial commit"
> $ touch .gitignore && git add .gitignore && git commit -m "Add empty .gitignore"
> $ git diff --stat HEAD^..
>  0 files changed, 0 insertions(+), 0 deletions(-)
> 
> May be the following is better?
> 
>  .gitignore |    0 +
>  1 files changed, 0 insertions(+), 0 deletions(-)

Have fun coding that.

Ciao,
Dscho

```

## Michael J Gruber, 2009-01-12 15:41

Subject: Re: "git diff --stat" doesn't show added empty file
Message-ID: <496B64BA.7000408@drmicha.warpmail.net>
URL: https://gitlist.dev/e/496B64BA.7000408%40drmicha.warpmail.net
In-Reply-To: <alpine.DEB.1.00.0901121319210.3586@pacific.mpi-cbg.de>

```
Johannes Schindelin venit, vidit, dixit 01/12/09 13:19:
> Hi,
> 
> On Mon, 12 Jan 2009, Ping Yin wrote:
> 
>> $ git --version
>> git version 1.6.1.9.g97c34
>> $ mkdir test && cd test && git init && git commit --allow-empty -m
>> "Initial commit"
>> $ touch .gitignore && git add .gitignore && git commit -m "Add empty .gitignore"
>> $ git diff --stat HEAD^..
>>  0 files changed, 0 insertions(+), 0 deletions(-)
>>
>> May be the following is better?
>>
>>  .gitignore |    0 +
>>  1 files changed, 0 insertions(+), 0 deletions(-)
> 
> Have fun coding that.

Removing 5 lines from diff.c does the job, except for the " +" after 0,
but I don't know if that output is really better. Is the
addition/removal of an empty file a file change? It's certainly a change
of the containing dir, which git does not track. I don't see how to
distinguish addition from removal of an empty file at that point in the
code yet. This might be the "fun" part...

Michael

```

## Linus Torvalds, 2009-01-12 16:13

Subject: Re: "git diff --stat" doesn't show added empty file
Message-ID: <alpine.LFD.2.00.0901120805310.6528@localhost.localdomain>
URL: https://gitlist.dev/e/alpine.LFD.2.00.0901120805310.6528%40localhost.localdomain
In-Reply-To: <46dff0320901111936h6343e51fo94750d83e95743dc@mail.gmail.com>

```


On Mon, 12 Jan 2009, Ping Yin wrote:
> $ git diff --stat HEAD^..
>  0 files changed, 0 insertions(+), 0 deletions(-)

In the kernel, we use "git diff --stat --summary" for exactly this reason.

Well, not exactly. 

The thing is, even if the file is _not_ empty, there's a huge difference 
between "added 100 lines to an already-existing file" and "created a new 
100-line file". Which is exactly what "--summary" adds. 

And it sometimes even makes sense to show the summary without the 
diffstat. If you're _only_ interested in create/delete/rename information, 
you can do "git show --summary <cmit>". It won't give you line counts, but 
it will give you information about any changes to filenames, eg in the 
kernel archive, you could see an example of this with

	git show -M --summary 95b482a8d31116f3f5c2a5089569393234d06385

where you have a combination of renames, creates and deletes.

So I think it's already better than what you ask for.

			Linus

```

## Ping Yin, 2009-01-13 07:42

Subject: Re: "git diff --stat" doesn't show added empty file
Message-ID: <46dff0320901122342q75e3e9e0gfe4e83bc7c60f193@mail.gmail.com>
URL: https://gitlist.dev/e/46dff0320901122342q75e3e9e0gfe4e83bc7c60f193%40mail.gmail.com
In-Reply-To: <alpine.LFD.2.00.0901120805310.6528@localhost.localdomain>

```
On Tue, Jan 13, 2009 at 12:13 AM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
>
> On Mon, 12 Jan 2009, Ping Yin wrote:
>> $ git diff --stat HEAD^..
>>  0 files changed, 0 insertions(+), 0 deletions(-)
>
> In the kernel, we use "git diff --stat --summary" for exactly this reason.
>
> Well, not exactly.
>
> The thing is, even if the file is _not_ empty, there's a huge difference
> between "added 100 lines to an already-existing file" and "created a new
> 100-line file". Which is exactly what "--summary" adds.
>
> And it sometimes even makes sense to show the summary without the
> diffstat. If you're _only_ interested in create/delete/rename information,
> you can do "git show --summary <cmit>". It won't give you line counts, but
> it will give you information about any changes to filenames, eg in the
> kernel archive, you could see an example of this with
>
>        git show -M --summary 95b482a8d31116f3f5c2a5089569393234d06385
>
> where you have a combination of renames, creates and deletes.
>
> So I think it's already better than what you ask for.
>
>                        Linus
>

Thanks. --summary works.
I just want to get all changed files. I think "git diff --name-status
A..B" should be better.


Ping Yin

```

## Johannes Schindelin, 2009-01-13 11:27

Subject: Re: "git diff --stat" doesn't show added empty file
Message-ID: <alpine.DEB.1.00.0901131223010.3586@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0901131223010.3586%40pacific.mpi-cbg.de
In-Reply-To: <496B64BA.7000408@drmicha.warpmail.net>

```
Hi,

On Mon, 12 Jan 2009, Michael J Gruber wrote:

> Johannes Schindelin venit, vidit, dixit 01/12/09 13:19:
> 
> > On Mon, 12 Jan 2009, Ping Yin wrote:
> > 
> >> $ git --version
> >> git version 1.6.1.9.g97c34
> >> $ mkdir test && cd test && git init && git commit --allow-empty -m
> >> "Initial commit"
> >> $ touch .gitignore && git add .gitignore && git commit -m "Add empty .gitignore"
> >> $ git diff --stat HEAD^..
> >>  0 files changed, 0 insertions(+), 0 deletions(-)
> >>
> >> May be the following is better?
> >>
> >>  .gitignore |    0 +
> >>  1 files changed, 0 insertions(+), 0 deletions(-)
> > 
> > Have fun coding that.
> 
> Removing 5 lines from diff.c does the job,

I can only think that you mean these lines:

                else if (!data->files[i]->is_renamed &&
                         (added + deleted == 0)) {
                        total_files--;
                        continue;
                }

However, they are also present in the initial stat code in d75f7952:

                } else if (added + deleted == 0) {
                        total_files--;
                        continue;
                }

Now, the fun part is finding out why this code is there.  Are there 
unintended side effects?  If so, are they still there?  Or was it 
introduced due to an explicit request back then?  Was it just sloppy?

Removing the 5 lines is not all you have to do, by _far_.

Lots of fun,
Dscho

```
