# [BUG] git-diff-tree or git-commit: wrong diff(stat)

3 messages from 2007-03-05 to 2007-03-05. Participants: Matthias Lederhofer, Junio C Hamano.
Thread: https://gitlist.dev/t/7097

## Matthias Lederhofer, 2007-03-05 20:07

Subject: [BUG] git-diff-tree or git-commit: wrong diff(stat)
Message-ID: <20070305200751.GA13655@moooo.ath.cx>
URL: https://gitlist.dev/e/20070305200751.GA13655%40moooo.ath.cx

```
git-commit.sh uses git-diff-tree [options] HEAD --.  The '--' was
added in 521f9c4d to prevent problems when HEAD exists as a file but
git-diff-tree shows only differences below the current directory when
'--' is used.  Hence git-commit in a subdirectory shows only stats for
the subdirectory.  Example:
~/foo% git init
Initialized empty Git repository in .git/
~/foo% mkdir d
~/foo% seq 1 10 | tee a > d/b
~/foo% git add a d/b
~/foo% cd d
~/foo/d% git commit -m blub
Created initial commit 49d6f2eac51d3a2665a539adc2cc8676e5b14a3d
 1 files changed, 10 insertions(+), 0 deletions(-)
 create mode 100644 d/b

```

## Junio C Hamano, 2007-03-05 20:22

Subject: Re: [BUG] git-diff-tree or git-commit: wrong diff(stat)
Message-ID: <7v3b4jzbha.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7v3b4jzbha.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20070305200751.GA13655@moooo.ath.cx>

```
Matthias Lederhofer <matled@gmx.net> writes:

> git-commit.sh uses git-diff-tree [options] HEAD --.  The '--' was
> added in 521f9c4d to prevent problems when HEAD exists as a file but
> git-diff-tree shows only differences below the current directory when
> '--' is used.  Hence git-commit in a subdirectory shows only stats for
> the subdirectory.

A cd_to_toplevel before that diff-tree should fix that,
shouldn't it?

For that matter, I think the commit hook should be run from a
known environment without getting affected by the user running
git-commit from a random subdirectory, and so should rerere.  So
how about....


 git-commit.sh |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/git-commit.sh b/git-commit.sh
index be3677c..b8c00b8 100755
--- a/git-commit.sh
+++ b/git-commit.sh
@@ -622,6 +622,9 @@ else
 fi
 ret="$?"
 rm -f "$GIT_DIR/COMMIT_MSG" "$GIT_DIR/COMMIT_EDITMSG" "$GIT_DIR/SQUASH_MSG"
+
+cd_to_toplevel
+
 if test -d "$GIT_DIR/rr-cache"
 then
 	git-rerere

```

## Matthias Lederhofer, 2007-03-05 22:08

Subject: Re: [BUG] git-diff-tree or git-commit: wrong diff(stat)
Message-ID: <20070305220814.GA17302@moooo.ath.cx>
URL: https://gitlist.dev/e/20070305220814.GA17302%40moooo.ath.cx
In-Reply-To: <7v3b4jzbha.fsf@assigned-by-dhcp.cox.net>

```
Junio C Hamano <junkio@cox.net> wrote:
> A cd_to_toplevel before that diff-tree should fix that,
> shouldn't it?

That should fix this problem.  But anyway I think it is strange that
`git diff` and `git diff --` differ in subdirectories (the latter
shows only changes for the current directory).

```
