# git commit --verbose shows incorrect diff when pre-commit hook is used to modify files

4 messages from 2019-02-11 to 2019-03-03. Participants: Fernando Chorney, Sergey Lukashev, Junio C Hamano.
Thread: https://gitlist.dev/t/50466

## Fernando Chorney, 2019-02-11 21:27

Subject: git commit --verbose shows incorrect diff when pre-commit hook is used to modify files
Message-ID: <CANFDZM5=ffu-=H=vrO3Kr0t2km-3Zg4=msYUWqqJQKGxGojnqA@mail.gmail.com>
URL: https://gitlist.dev/e/CANFDZM5%3Dffu-%3DH%3DvrO3Kr0t2km-3Zg4%3DmsYUWqqJQKGxGojnqA%40mail.gmail.com
In-Reply-To: <CANFDZM7fsbwwqhyWTzfivm4L=GgtCMfCi+DekZurs+SFGqaOjw@mail.gmail.com>

```
Hi,

I am trying to use a pre-commit hook to modify files before they are
to be committed. The problem I am running into is that if I use "git
commit --verbose", which I often do so that I can see the diff, the
diff it displays in the editor is the diff before the pre-commit hook
was run rather than what the diff would be after the pre-commit was
run.

I would like to note, that the pre-commit hook is definitely running,
but when git grabs the diff seems to be in the wrong place.

I have set up a simple example on my github to show the problem.
https://github.com/fchorney/pre-commit-example

Is this intended behaviour, or perhaps an issue?

 Thanks,
 Fernando Chorney

```

## Sergey Lukashev, 2019-02-11 22:04

Subject: Re: git commit --verbose shows incorrect diff when pre-commit hook is used to modify files
Message-ID: <31924311549922691@sas1-d856b3d759c7.qloud-c.yandex.net>
URL: https://gitlist.dev/e/31924311549922691%40sas1-d856b3d759c7.qloud-c.yandex.net
In-Reply-To: <CANFDZM5=ffu-=H=vrO3Kr0t2km-3Zg4=msYUWqqJQKGxGojnqA@mail.gmail.com>

```
At the time you see the diff the committing of changes has not yet been initiated. It's only after you type in the message that the ACTUAL committing starts and the hook runs.

You can print the diff of what your hook has changed by running "git diff" in it before adding changes.

12.02.2019, 00:28, "Fernando Chorney" <djsbx@djsbx.com>:
> Hi,
>
> I am trying to use a pre-commit hook to modify files before they are
> to be committed. The problem I am running into is that if I use "git
> commit --verbose", which I often do so that I can see the diff, the
> diff it displays in the editor is the diff before the pre-commit hook
> was run rather than what the diff would be after the pre-commit was
> run.
>
> I would like to note, that the pre-commit hook is definitely running,
> but when git grabs the diff seems to be in the wrong place.
>
> I have set up a simple example on my github to show the problem.
> https://github.com/fchorney/pre-commit-example
>
> Is this intended behaviour, or perhaps an issue?
>
>  Thanks,
>  Fernando Chorney


```

## Fernando Chorney, 2019-02-26 15:32

Subject: Re: git commit --verbose shows incorrect diff when pre-commit hook is used to modify files
Message-ID: <CANFDZM68A96YprMKhaHNfPRAtK18ad6Bo9=uesxHN=-tLONn=g@mail.gmail.com>
URL: https://gitlist.dev/e/CANFDZM68A96YprMKhaHNfPRAtK18ad6Bo9%3DuesxHN%3D-tLONn%3Dg%40mail.gmail.com
In-Reply-To: <31924311549922691@sas1-d856b3d759c7.qloud-c.yandex.net>

```
Hmm looks like I forgot to send my reply to this back to the mailing list.

"Hmm, so I currently have it set to run vim as my commit editor, and
enter the message in there most of the time. I can definitely see
output from the hook into the shell before my vim editor loads up that
shows me the diff and lets me add in the commit message. This leads me
to believe that the pre-commit hook is being run before the editor
(with the diff) pops up."

Does anybody else have any insight to this issue?

On Mon, Feb 11, 2019 at 4:04 PM Sergey Lukashev <lukashev.s@ya.ru> wrote:
>
> At the time you see the diff the committing of changes has not yet been initiated. It's only after you type in the message that the ACTUAL committing starts and the hook runs.
>
> You can print the diff of what your hook has changed by running "git diff" in it before adding changes.
>
> 12.02.2019, 00:28, "Fernando Chorney" <djsbx@djsbx.com>:
> > Hi,
> >
> > I am trying to use a pre-commit hook to modify files before they are
> > to be committed. The problem I am running into is that if I use "git
> > commit --verbose", which I often do so that I can see the diff, the
> > diff it displays in the editor is the diff before the pre-commit hook
> > was run rather than what the diff would be after the pre-commit was
> > run.
> >
> > I would like to note, that the pre-commit hook is definitely running,
> > but when git grabs the diff seems to be in the wrong place.
> >
> > I have set up a simple example on my github to show the problem.
> > https://github.com/fchorney/pre-commit-example
> >
> > Is this intended behaviour, or perhaps an issue?
> >
> >  Thanks,
> >  Fernando Chorney
>

```

## Junio C Hamano, 2019-03-03 01:18

Subject: Re: git commit --verbose shows incorrect diff when pre-commit hook is used to modify files
Message-ID: <xmqqmumc69hf.fsf@gitster-ct.c.googlers.com>
URL: https://gitlist.dev/e/xmqqmumc69hf.fsf%40gitster-ct.c.googlers.com
In-Reply-To: <CANFDZM68A96YprMKhaHNfPRAtK18ad6Bo9=uesxHN=-tLONn=g@mail.gmail.com>

```
Fernando Chorney <djsbx@djsbx.com> writes:

> Hmm looks like I forgot to send my reply to this back to the mailing list.
>
> "Hmm, so I currently have it set to run vim as my commit editor, and
> enter the message in there most of the time. I can definitely see
> output from the hook into the shell before my vim editor loads up that
> shows me the diff and lets me add in the commit message. This leads me
> to believe that the pre-commit hook is being run before the editor
> (with the diff) pops up."
>
> Does anybody else have any insight to this issue?

I do not know if it counts as an insight, but the pre-* hooks, not
limited to pre-commit, were invented for the purpose of validating
the input to an operation so that the hooks can _reject_ if the
outcome anticipated does not satisfy project's conventions; the
purpose they were invented was not because the operations wanted to
allow the input to them.  So attempting to modify the tree in
pre-commit hook, for example, is outside the scope of its design and
I wouldn't be surprised if you get an unexpected result.

```
