Skip to content

Commit e148647

Browse files
committed
Add a direct test of run_commit_hook
This has three benefits: - run_commit_hook is public, being listed in git.index.fun.__all__, so it makes sense for it to have its own test. - When investigating (future, or current xfail-covered) failure of functions that use run_commit_hook, it will be useful to compare the results of other tests that already do exist to that of a direct test of run_commit_hook. - When changing which bash.exe run_commit_hook selects to use on Windows (including to ameliorate the limitation covered by the WinBashStatus.WslNoDistro xfail marks, or to attempt other possible changes suggested in gitpython-developers#1745), or even just to investigate the possibility of doing so, it will make sense to add tests like this test but for more specific conditions or edge cases. Having this typical-case test to compare to should be helpful both for writing such tests and for efficiently verifying that the conditions they test are really the triggers for any failures.
1 parent f664a0b commit e148647

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

Diff for: test/test_index.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
InvalidGitRepositoryError,
3333
UnmergedEntriesError,
3434
)
35-
from git.index.fun import hook_path
35+
from git.index.fun import hook_path, run_commit_hook
3636
from git.index.typ import BaseIndexEntry, IndexEntry
3737
from git.objects import Blob
3838
from test.lib import TestBase, fixture, fixture_path, with_rw_directory, with_rw_repo
@@ -991,6 +991,24 @@ class Mocked:
991991
rel = index._to_relative_path(path)
992992
self.assertEqual(rel, os.path.relpath(path, root))
993993

994+
@pytest.mark.xfail(
995+
type(_win_bash_status) is WinBashStatus.Absent,
996+
reason="Can't run a hook on Windows without bash.exe.",
997+
rasies=HookExecutionError,
998+
)
999+
@pytest.mark.xfail(
1000+
type(_win_bash_status) is WinBashStatus.WslNoDistro,
1001+
reason="Currently uses the bash.exe of WSL, even with no WSL distro installed",
1002+
raises=HookExecutionError,
1003+
)
1004+
@with_rw_repo("HEAD", bare=True)
1005+
def test_run_commit_hook(self, rw_repo):
1006+
index = rw_repo.index
1007+
_make_hook(index.repo.git_dir, "fake-hook", "echo 'ran fake hook' >output.txt")
1008+
run_commit_hook("fake-hook", index)
1009+
output = Path(rw_repo.git_dir, "output.txt").read_text(encoding="utf-8")
1010+
self.assertEqual(output, "ran fake hook\n")
1011+
9941012
@pytest.mark.xfail(
9951013
type(_win_bash_status) is WinBashStatus.Absent,
9961014
reason="Can't run a hook on Windows without bash.exe.",

0 commit comments

Comments
 (0)