我的Mercurial hook能调用其他文件中的代码吗?

3 投票
1 回答
730 浏览
提问于 2025-04-16 06:09

我有一个叫做 precommit_bad_branch 的钩子函数,它引入了 hook_utils。当我通过提交来调用 precommit_bad_branch 时,出现了以下错误信息:

error: precommit.branch_check hook raised an exception: No module named hook_utils
abort: No module named hook_utils!

看起来我不能从 precommit_bad_branch 调用 hook_utils。如果我不通过 Mercurial 明确调用它,代码是可以正常工作的。

我的钩子能否调用另一个文件中的代码呢?

我的 hgrc 钩子部分看起来是这样的:

[hooks]
precommit.branch_check = python:C:\workspaces\hg_hooks\next_hooks.py:precommit_bad_branch
precommit.debug_code_check = python:C:\workspaces\hg_hooks\common_hooks.py:precommit_contains_debug_code
preupdate.merge_check = python:C:\workspaces\hg_hooks\next_hooks.py:preupdate_bad_merge

1 个回答

2
import hook_utils

C:\workspaces\hg_hooks 这个文件夹放到你的 PYTHONPATH 里,这样你就可以在配置文件中写

[hooks]
precommit.branch_check = python:next_hooks.precommit_bad_branch

而且你也可以在任何 Python 文件里使用,包括 next_hooks.py 这个文件。

另外,你也可以在 next_hooks.py 文件里修改 sys.path,可以用类似下面的代码:

import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

import hook_utils

撰写回答