当客户端“找不到更改”时,Mercurial会在服务器上运行一个钩子

时间:2013-01-25 14:29:31

标签: mercurial

当客户端推送或拉动并且“未找到任何更改”时,是否存在在服务器上运行挂钩的黑客或出路。无论存储库是否已更改,我希望能够在客户端上运行脚本。

目前很容易对所有情况使用标准挂钩(pretxnchangegroupchangegroup等),但在没有变化时它们不会被触发。

1 个答案:

答案 0 :(得分:0)

一个钩子不能做你想要的。在服务器端运行的挂钩都是由事物(更改集或推送键)的到达触发的。 nothing-arri 没有服务器端挂钩,也没有永不发送内容的命令(incomingoutgoing等)。

我试过的一个远景使用post-serve挂钩。当客户端通过ssh连接到远程存储库时,它确实在该客户端上运行hg serve,所以我希望在ssh会话结束时执行post-serve挂钩,但没有这样的运气(确实如此)该钩子可能根本不存在。)

幸运的是还有其他一些hackier-options而不是hooks。对于通过ssh访问的存储库,您可以更改.ssh/authorized-keys文件以强制执行某些命令:

command="/home/me/hg_and_somethingelse.sh" ssh-rsa AAAA....

然后在/home/me/hg_and_something_else.sh你有:

#!/bin/bash
hg $@
echo ANY COMMAND FROM HERE ONWARD IS RUN FOR EVERY PUSH, PULL, CLONE, etc.

类似于http-served repos,您只需在the wsgi file you're using结尾处添加任何内容即可。

作为一个警告,有许多工具(例如IDE)经常检查更改,因此您的脚本将比您想象的更频繁地运行。