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
threads / bug / 7097
[BUG] git-diff-tree or git-commit: wrong diff(stat)
Subject: [BUG] git-diff-tree or git-commit: wrong diff(stat)
Re: [BUG] git-diff-tree or git-commit: wrong diff(stat)
Matthias Lederhofer <matled@gmx.net> writes:
Show 5 quoted lines
> 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
Re: [BUG] git-diff-tree or git-commit: wrong diff(stat)
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).