0

'已经在文件 commit_hooks.py 中编写了两个函数,我想在任何提交被持久化之前运行它们,但我不知道如何编写我的 hgrc 来检测它们。

函数头是:

def precommit_bad_merge(ui, repo, parent1=None, parent2=None, **kwargs):
...

def precommit_bad_branching(ui, repo, **kwargs):
...

我试过使用这个“指南”,但文档对我来说太“手册页”了。以下是一个不起作用的弃儿。

[hooks]
precommit = ..\..\mno2\commit_hooks.py

更新! 将钩线重写为:

precommit = D:\environments\next\mno2\commit_hooks.py

让 Mercurial 检测到 precommit 钩子,但由于某种原因它总是以状态 1 退出。

4

2 回答 2

2

像这样设置您的[hooks]部分:

[hooks]
precommit.foo = python:D:\environments\next\mno2\commit_hooks.py:precommit_bad_merge
precommit.bar = python:D:\environments\next\mno2\commit_hooks.py:precommit_bad_branching

您使用的行的语法用于precommit外部挂钩,因此它将您的 python 文件视为一个独立的脚本(我假设它不是因为您使用函数签名进行进程内挂钩)。

您可能需要在您的路径中包含 python 可执行文件(我愿意)。

For more information, see the definitive guide's section on in-process hooks; there's some useful information hidden in the comments.

于 2010-10-02T15:31:34.617 回答
0

“man pagey”文档有一个关于 python 钩子语法的部分:

Python 钩子的语法如下:

hookname = python:modulename.submodule.callable
hookname = python:/path/to/python/module.py:callable

Python 挂钩在 Mercurial 进程中运行。每个 hook 至少使用三个关键字参数调用:一个 ui 对象(关键字 ui)、一个存储库对象(关键字 repo)和一个 hooktype 关键字,该关键字告诉使用哪种类型的 hook。上面列为环境变量的参数作为关键字参数传递,没有 HG_ 前缀,并且名称为小写。

如果 Python 挂钩返回“真”值或引发异常,则将其视为失败。

于 2010-10-01T16:41:38.313 回答