每当客户端推送或拉取并获得“未找到更改”时,是否有破解或出路在服务器上运行挂钩。无论存储库是否已更改,我都希望能够在客户端的 pull 上运行脚本。
目前,在所有情况下都可以轻松使用标准挂钩(pretxnchangegroup
、changegroup
等),但在没有更改时不会触发它们。
每当客户端推送或拉取并获得“未找到更改”时,是否有破解或出路在服务器上运行挂钩。无论存储库是否已更改,我都希望能够在客户端的 pull 上运行脚本。
目前,在所有情况下都可以轻松使用标准挂钩(pretxnchangegroup
、changegroup
等),但在没有更改时不会触发它们。
钩子将无法完成您正在寻找的事情。在服务器端运行的钩子都是由事物(变更集或按钮)的到来触发的。没有服务器端的钩子用于空无到达或从不发送东西的命令(incoming
,outgoing
等)。
我试过的一个远射没有用是用post-serve
钩子。当客户端通过 ssh 连接到远程存储库时,它确实hg serve
在该客户端上运行,所以我希望post-serve
钩子会在 ssh 会话结束时执行,但没有这样的运气(实际上该钩子可能根本不存在) .
幸运的是,除了钩子之外,还有一些其他的黑客选项。对于您通过 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 服务的存储库类似,您只需在您正在使用的 wsgi 文件末尾添加任何您想要的内容。
需要注意的是,有很多工具(例如 IDE)经常检查更改,因此您的脚本将比您想象的更频繁地运行。