1

我已经有一段时间了,我似乎无法让它工作。

根据 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 中添加一个新方法。基本上为了测试我想阻止所有推送到回购的钩子。所以我将使用 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 所在的同一个“lib”文件夹中)。创建了一个名为 canpush.py 的文件并在那里添加了相同的方法。我更改了挂钩路径以定位新文件名:

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

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

我在这里做错了什么?

此外,如果有人知道如何在 Kallithea 中使用单个 repo 中的 hgrc 设置,那么一个例子会很棒。原来的问题在这里

4

2 回答 2

1

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

事实证明,设置很好,但出于绝望,我决定重新启动 kallithea 守护进程(文档中没有出现),基本上是在想“可能出了什么问题”——这就是诀窍!

我猜在启动过程中,事情会被编译/缓存,并且钩子定义方法被找到并起作用(如果有人对 kallithea 重启时发生的事情有更好的解释,请分享)

所以请记住,在每次更改挂钩文件后,kallithea 守护程序必须重新启动才能使挂钩生效。

sudo service kallithea restart

于 2016-05-24T08:22:59.780 回答
0

从阅读 kallithea 文档中我不清楚的其他一点是,这些钩子是可变的钩子,它们并不是真正的 kallithea/rhodecode API,它一直都是可变的。

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

于 2019-05-17T17:56:38.593 回答