Fix commit hooks respecting core.hooksPath#2159
Open
Siesta0217 wants to merge 1 commit into
Open
Conversation
Use git rev-parse --git-path when resolving commit hook paths so GitPython follows Git's core.hooksPath configuration.\n\nAdd regression coverage for a pre-commit hook stored in a custom hooks path.\n\nFixes gitpython-developers#2083
Byron
requested changes
Jun 16, 2026
Byron
left a comment
Member
There was a problem hiding this comment.
Thanks a lot.
The test is good, but the implementation needs adjustments.
Comment on lines
85
to
95
Member
There was a problem hiding this comment.
This doesn't do what's advertised in the PR description, as it should be conditional to the presence of core.hookspath.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates GitPython’s commit-hook execution to resolve hook locations via Git itself, so hooks honor core.hooksPath, and adds a regression test to confirm a hook runs from a custom hooks directory.
Changes:
- Add
_commit_hook_path()that resolveshooks/<name>viagit rev-parse --git-path, intended to respectcore.hooksPath. - Switch
run_commit_hook()to use_commit_hook_path()instead of hardcoding.git/hooks/<name>. - Add a regression test verifying a
pre-commithook runs from a configured custom hooks path.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
git/index/fun.py |
Adds Git-based hook path resolution and uses it in run_commit_hook(). |
test/test_index.py |
Adds a regression test for core.hooksPath hook execution. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+68
to
+74
| """:return: path to the named commit hook, respecting Git's core.hooksPath.""" | ||
| hp = index.repo.git.rev_parse("--git-path", f"hooks/{name}") | ||
| if osp.isabs(hp): | ||
| return hp | ||
|
|
||
| base_dir = index.repo.working_dir or index.repo.git_dir | ||
| return osp.abspath(osp.join(base_dir, hp)) |
Comment on lines
+1188
to
1189
|
|
||
| @pytest.mark.xfail( |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
git rev-parse --git-path hooks/<name>so GitPython follows Git'score.hooksPathconfiguration..git/hooksbehavior whencore.hooksPathis not configured.pre-commithook stored in a custom hooks path.Fixes #2083
Test Plan
python -m pytest test/test_index.py::TestIndex::test_pre_commit_hook_respects_core_hooks_path test/test_index.py::TestIndex::test_pre_commit_hook_success -q -o 'addopts='python -m pytest test/test_index.py::TestIndex::test_run_commit_hook test/test_index.py::TestIndex::test_pre_commit_hook_fail test/test_index.py::TestIndex::test_commit_msg_hook_success -q -o 'addopts='ruff check git/index/fun.py test/test_index.py