Mercurial 确定传出钩子中的目标存储库

Mercurial 确定传出钩子中的目标存储库,mercurial,mercurial-hook,Mercurial,Mercurial Hook,我试图编写一个Mercurial钩子,在特定条件下阻止推送,但要确定是否阻止推送,需要知道推送将要发送到的存储库。我知道,理想情况下,这将在远程存储库端的prechangegroup钩子中完成,但在我的情况下,这是不可能的-请参阅我的说明以了解原因。(我喜欢Ry4an的建议,但我必须为一大堆存储库这样做,所以为每个存储库创建一个副本似乎不是一个好办法。) 无论如何,我最初是在一个pre-pushhook中这样做的,但这只是在非常特定的情况下调用的;特别是,如果用户有一个为push定义的别名,那么

我试图编写一个Mercurial钩子,在特定条件下阻止推送,但要确定是否阻止推送,需要知道推送将要发送到的存储库。我知道,理想情况下,这将在远程存储库端的
prechangegroup
钩子中完成,但在我的情况下,这是不可能的-请参阅我的说明以了解原因。(我喜欢Ry4an的建议,但我必须为一大堆存储库这样做,所以为每个存储库创建一个副本似乎不是一个好办法。)

无论如何,我最初是在一个
pre-push
hook中这样做的,但这只是在非常特定的情况下调用的;特别是,如果用户有一个为
push
定义的别名,那么我的钩子就不会被调用,这意味着它可能会被无意中绕过。我的下一个想法是
preoutgoing
钩子,它肯定更简单——它可以在推送以外的情况下被调用,但是使用传递的
source
参数很容易过滤掉

但是,
preoutgoing
hook没有可用的目标存储库;这甚至有可能,但现在对我没有多大好处。目前,我正在通过两个挂钩来解决这个问题;确定目的地的
预推
一个,然后是实际作用于目的地的
预出
一个。当然,
pre-push
hook可能不会运行,但在这种情况下,我只是警告用户推送可能不安全,并让他们选择放弃

我有两个问题。首先,有没有更好的方法来实现这一点?其次,如果没有,那么可以安全地假设传递给我的两个钩子(它们都在进程中)的
repo
对象是相同的吗?换句话说,如果我做了

repo.some_custom_property = outgoing_url
在我的
预推
钩子中,是否保证随后调用的
预输出
钩子将接收相同的
repo
对象,因此可以通过该对象访问我的自定义属性?我知道我可以通过环境变量或临时文件来实现这一点,但这似乎更好,而且我不必担心之后的清理。我也看到了,但没什么帮助