从Mercurial prechangegroup钩子读取命令行参数

时间:2012-06-07 02:59:19

标签: mercurial mercurial-hook

如果某个条件成立,我试图禁止推送到Mercurial存储库。但是,如果用户使用push --force,则必不可少,无论如何都会推送。

我知道在使用pre-push挂钩进行推送的机器上执行此操作非常容易,该挂钩将命令行参数传递给挂钩。但是,由于钩子没有传播,我不得不以某种方式将钩子分发给存储库的每个用户,并依赖它们而不是弄乱它。

因此,我认为要走的路是在存储库服务器上有一个prechangegroup挂钩,检查条件并在必要时中止推送,但我无法找到获取命令的方法用户从此挂钩推送时使用的行参数。有没有办法通过在存储库服务器上使用钩子来实现这一目的?

我知道可能的解决方法是使用pretxnchangegroup挂钩,如果最新变更集的提交消息遵循某种模式,则允许推送。但是,从存储库用户的角度来看,--force选项看起来要容易得多,因为它不会强制它们进行虚拟提交以使消息正确。

1 个答案:

答案 0 :(得分:3)

很抱歉,--force命令行选项不会通过网络发送,因此它根本无法在服务器端提供。你需要找出一些方法来表示“我的意思是真的!”带外,无论是特殊用户名,特殊提交消息等。

考虑只是拥有一个没有禁止钩子的第二个服务器端repo,并且只有当它们真正意味着它时才会使用它。类似的东西:

hg push http://your-server/repo
.. rejected due to hook failure
hg push http://your-server/repo-and-I-really-mean-it

在服务器端,repo-and-I-really-mean-it repo没有钩子并自动推送到普通仓库。