Re: Commit f5bbc322 to git broke pre-commit hooks which read stdin
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 4, 2008, 12:17 UTC
- Message-ID
- <7vbq5u7kf9.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <47CD370A.3070404@viscovery.net>
Johannes Sixt <j.sixt@viscovery.net> writes:
Show 9 quoted lines
>> It is not metastore. It is an interactive hook that reads from the user
>> who is sitting on the terminal and invoked the git-commit program.
>
> Are you saying stdin should not be directed to /dev/null, or that an
> interactive hook is required to do
>
> exec < /dev/tty || { echo 2>&1 "not interactive"; exit 1; }
>
> before it reads from stdin?I am saying that scripted version left the stdin as-is but somehow we ended up spawning with .no_stdin = 1 in the C-rewrite, which is a change in established behaviour. It is often called a regression, unless the change has a very good reason. And I tend to think this particular one falls into the former.
We should audit how the hooks are called from various commands re-implemented, comparing the environment the scripted version used to give them, which includes:
- what directory the hook is run in; - what environment variables are exported to it; - what temporary files are visible to them for inspection; - in what order they are run; - which file descriptor is connected to what;
I think we already caught some of the environment and ordering issues in commit and checkout, but I am far from confident to say that what we have behave identically to the scripted version.