threads / discuss / 51438

Fwd: Discovering the new parents in commit hooks

Subject: Fwd: Discovering the new parents in commit hooks

## tl;dr

2 messages between Jul 5, 2019 and Jul 8, 2019.

replies: 1people: 2as markdown or json

scott douglass· Jul 5, 2019, 22:01 UTC · lore
Hi,

I’d like to be able to discover the new parents-to-be SHA-1s during the hooks that run before a commit*. Essentially I’d like be able to distinguish the ‘git commit’ case from ‘git commit —amend’. Is there already a way to do this that I have overlooked? (I’ve read ‘man githooks’ and searched the wiki and various other places.)

If not, I would propose that perhaps the hooks could be passed a GIT_PARENTS (or perhaps GIT_NEW_PARENTS) environment variable which in the ‘not amend’ case would contain the SHA-1 for HEAD and MERGE_HEAD (if appropriate) and in the ‘—amend' case would contain HEAD^@ (all of the parents of HEAD).

[*] Specifically, it seems a useful thing to be able to find out in these hooks: applypatch-msg, pre-applypatch, commit-msg, prepare-commit-msg, commit-msg

Thanks.
brian m. carlson· Jul 8, 2019, 20:09 UTC · re: scott douglass · lore

Re: Fwd: Discovering the new parents in commit hooks

On 2019-07-05 at 22:01:59, scott douglass wrote:
Show 7 quoted lines
> Hi,
> 
> I’d like to be able to discover the new parents-to-be SHA-1s during
> the hooks that run before a commit*.  Essentially I’d like be able to
> distinguish the ‘git commit’ case from ‘git commit —amend’. Is there
> already a way to do this that I have overlooked? (I’ve read ‘man
> githooks’ and searched the wiki and various other places.)

I'm not aware of a way to distinguish this currently, although I agree having a way would be valuable. There are of course heuristic ways, but they can be fooled.

Show 5 quoted lines
> If not, I would propose that perhaps the hooks could be passed a
> GIT_PARENTS (or perhaps GIT_NEW_PARENTS) environment variable which in
> the ‘not amend’ case would contain the SHA-1 for HEAD and MERGE_HEAD
> (if appropriate) and in the ‘—amend' case would contain HEAD^@ (all of
> the parents of HEAD).

I think we'd probably skip such functionality in favor of exposing whether a commit is to be amended or not and let you script the parents yourself.

There are a lot of cases where one might want to know whether a commit was amended, but knowing that, you can determine the parents and anything else without much difficulty, so the amended option seems like the more general feature to implement.

-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204

← back to recent threads