在一个文件commit_hooks.py中编写了两个函数,我希望在任何提交持久化之前运行,但是我无法弄清楚如何编写我的hgrc来检测它们。
函数头是:
def precommit_bad_merge(ui, repo, parent1=None, parent2=None, **kwargs):
...
def precommit_bad_branching(ui, repo, **kwargs):
...
我已经尝试过使用这个“guide”,但文档对我来说太“挑剔了”。以下是无效的弃儿。
[hooks]
precommit = ..\..\mno2\commit_hooks.py
更新! 将钩线重写为:
precommit = D:\environments\next\mno2\commit_hooks.py
使Mercurial检测到precommit钩子,但由于某种原因它始终以状态1退出。
答案 0 :(得分: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可执行文件(我这样做)。
有关详细信息,请参阅权威指南中有关in-process hooks的部分;评论中隐藏着一些有用的信息。
答案 1 :(得分:0)
“man pagey”文档有一节关于python hook语法:
Python钩子的语法是 如下:
hookname = python:modulename.submodule.callable hookname = python:/path/to/python/module.py:callable
Python钩子在 Mercurial过程。每个钩子都被调用 至少有三个关键字参数: 一个ui对象(关键字ui),一个存储库 object(关键字repo)和hooktype 关键字,告诉什么样的钩子 用来。列出的参数为 上面的环境变量被传递 作为关键字参数,没有HG_ 前缀和小写的名称。
如果Python钩子返回“true” 值或提出异常,这是 被视为失败。