threads / discuss / 39451

pre-commit hook not run on conflict resolution during rebase

Subject: pre-commit hook not run on conflict resolution during rebase

## tl;dr

3 messages between May 28, 2015 and May 29, 2015.

replies: 2people: 2as markdown or json

Stefan Haller· May 28, 2015, 19:38 UTC · lore

When a rebase stops because of a conflict, and I edit the file to resolve the conflict and say "git rebase --continue", then the pre-commit hook doesn't run at that point, which means that I can commit bad stuff which the pre-commit hook would normally not allow in. We were bitten by this a few times already. (In our case, the hook rejects code that hasn't been run through clang-format. That's easy to forget when resolving conflicts during a rebase.)

>From glancing through the githooks manpage, I couldn't see any other
hook that would help in this situation. Am I missing something?

I guess the next best solution would be to also have a pre-push hook that performs the same checks again, just in case the bad code managed to get past the pre-commit hook for some reason or other. This feels very redundant, but I guess it would work well.

Any other suggestions?
-- 
Stefan Haller
Berlin, Germany
http://www.haller-berlin.de/
 
Junio C Hamano· May 28, 2015, 20:03 UTC · re: Stefan Haller · lore

Re: pre-commit hook not run on conflict resolution during rebase

lists@haller-berlin.de (Stefan Haller) writes:
Show 5 quoted lines
> When a rebase stops because of a conflict, and I edit the file to
> resolve the conflict and say "git rebase --continue", then the
> pre-commit hook doesn't run at that point,...
> From glancing through the githooks manpage, I couldn't see any other
> hook that would help in this situation. Am I missing something?

I do not think so. There may be some fallouts, like negatively affecting folks who have been relying on the current behaviour, but I do not see a fundamental reason why that hook should not trigger there (it may not trigger in the current implementation, but I view it as lack of need so far, not a deliberate omission).

> I guess the next best solution would be to also have a pre-push hook
> that performs the same checks again, just in case the bad code managed
> to get past the pre-commit hook for some reason or other. This feels
> very redundant, but I guess it would work well.

I'd say pre-receive would be the most sensible place to check things like this. Some of your developers may not have pre-commit hook or even run "commit --no-verify" to bypass the local check, and if you have a central meeting place for the efforts by all your folks, that is where you want to enforce the policy.

Checks done anywhere else are what are redundant, including the pre-commit hook in individual developers. You can view them as a way for individual developers to save their time---by choosing to check locally, they make sure their commits do not trigger the pre-receive hook at the central place.

Stefan Haller· May 29, 2015, 07:25 UTC · re: Junio C Hamano · lore

Re: pre-commit hook not run on conflict resolution during rebase

Junio C Hamano <gitster@pobox.com> wrote:
Show 9 quoted lines
> lists@haller-berlin.de (Stefan Haller) writes:
> 
> > I guess the next best solution would be to also have a pre-push hook
> > that performs the same checks again, just in case the bad code managed
> > to get past the pre-commit hook for some reason or other. This feels
> > very redundant, but I guess it would work well.
> 
> I'd say pre-receive would be the most sensible place to check things
> like this.

Yes, I totally agree, and we used to have this setup when we were still hosting our code in-house; with pre-receive doing the authorative checks, and pre-commit being optional as a convenience for developers, as you say.

Now we have moved most of our code to github, and you can't have pre-receive hooks there, as far as I can tell. (I should have mentioned that, sorry.)

To make up for that, we have put considerable effort into ensuring that everyone on the team has up-to-date hooks locally, by installing them automatically as part of our build system infrastructure.

In that light, do you agree that a pre-push hook is the best we can do now to plug this hole?

-- 
Stefan Haller
Berlin, Germany
http://www.haller-berlin.de/

← back to recent threads