如何在Kallithea中设置mercurial hooks

时间:2016-05-23 12:53:07

标签: mercurial mercurial-hook kallithea

我已经有一段时间了,而且我似乎无法让它发挥作用。

根据Kallithea文件:

To add another custom hook simply fill in the first textbox with <name>.<hook_type> and the second with the hook path. Example hooks can be found in kallithea.lib.hooks.

所以我的第一次尝试是向hooks.py添加一个新方法。基本上测试我想要阻止ALL推送回购的钩子。所以我将使用pretxnchangegroup并返回非0非假值作为Mercurial文档说明

A hook that executes successfully must exit with a status of zero if external, or return boolean “false” if in-process. Failure is indicated with a non-zero exit status from an external hook, or an in-process hook returning boolean “true”. If an in-process hook raises an exception, the hook is considered to have failed.

所以我这样做了:

def myhook(ui, repo, **kwargs): return True

我在Kallithea钩子选项中添加了GUI的钩子:

pretxnchangegroup <=> python:kallithea.lib.hooks.myhook

然而这失败了,因为由于某些原因无法找到该方法

abort: pretxnchangegroup hook is invalid ("kallithea.lib.hooks.myhook" is not defined)

所以我尝试将它放在另一个文件中(在hooks.py所在的&lt; lib&#39;文件夹中)。创建了一个名为canpush.py的文件,并在那里添加了相同的方法。我更改了钩子路径以定位新文件名:

pretxnchangegroup <=> python:kallithea.lib.hooks.myhook

然而钩子没有触发,我可以毫无问题地推送到我的仓库。我计划在将来更改实际的钩子实现,允许推送,但首先我需要使用Kallithea获得任何钩子功能。

我在这里做错了什么?

此外,如果有人知道如何在Kallithea中使用个人回购中的hgrc设置,那么一个例子就会很棒。原始问题here

2 个答案:

答案 0 :(得分:1)

回答我自己的问题,但只是将其作为参考。

事实证明设置很好,但是在绝望的行为中我决定重新启动kallithea守护进程(文档中没有任何地方),基本上认为“可能出现什么问题” - 这就是诀窍!

我想在启动过程中,事情会被编译/缓存,并且钩子定义方法被发现并且功能正常(如果有人对kallithea重启会发生什么事情有更好的解释请分享)

所以请记住,每次更改钩子文件后,必须重新启动kallithea守护进程才能使钩子产生任何效果。

sudo service kallithea restart

答案 1 :(得分:0)

在阅读kallithea文档时,我还不清楚的另一点是,这些钩子是Mercurial钩子,它们并不是真正的kallithea / rhodecode API,一直都是汞柱。

这意味着有关如何编写文档的最佳文档来源类似于http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html