如何编写我的hgrc以便Mercurial检测到我的钩子?

时间:2010-10-01 14:21:43

标签: mercurial hook hgrc

在一个文件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退出。

2 个答案:

答案 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”   值或提出异常,这是   被视为失败。