如何强制Mercurial客户端使用特定版本的Mercurial?

时间:2011-08-23 19:29:46

标签: mercurial mercurial-hook

随着Mercurial的新版本的发布,我们希望以某种方式强制开发人员,设计人员和其他人使用Mercurial的已批准(或更高版本)版本。例如,我们目前使用的是1.8.3版本。我想在1.8.3之前使用任何东西自动阻止/拒绝用户访问我们的存储库,并允许任何后续版本。 我可以在钩子中执行此操作吗?

我们在Windows和IIS上运行我们的服务器。我想过编写一个IIS扩展,为不是正确版本的客户端返回500个错误,但客户端不会在其HTTP请求中发送任何版本信息,只是“mercurial / proto 1.0”,我认为这意味着Mercurial的1.0版本HTTP协议。

我想要的是什么?有没有其他方法可以解决这个问题?

我们想这样做是因为 Mercurial区分大小写。我们100%使用不区分大小写的Windows。这导致我们发生了大量的折叠碰撞。我们浪费了很多时间。尽管Mercurial已经改进了对案件的处理,但它仍然存在可以引入案例折叠问题的情况。 由于在新版本中进行了案例处理改进,我们希望能够将用户强制执行这些版本,因此不会引入新问题,我们不得不花时间修复。

2 个答案:

答案 0 :(得分:2)

您是否有充分的理由想要强制执行此操作? Mercurial具有自己处理版本功能的内部机制:如果您使用1.8.3创建一个使用尚未出现的功能的存储库,例如1.6,则1.6客户端将拒绝与此类存储库进行交互。换句话说,mercurial本身拒绝访问,但不基于版本号,而是基于实际功能。这样,如果新版本不以任何方式破坏兼容性,您可以毫无问题地同时使用这两个版本。

在内部,这是有效的,因为mercurial会向存储库的元信息添加所需功能的列表,并在尝试对其执行任何操作之前检查此列表。如果列表包含mercurial尚未了解的功能,那么它会得出结论:它无法与其进行有意义的交互并拒绝合作。

因此,IMO最好的办法是简单地制定一项政策,要求开发人员使用最新版本,但不要添加其他技术措施。如果有人试图推出一个真的太旧的版本,那么他们会收到一条错误消息,如果他们抱怨,你可以简单地指出他们的官方政策。

答案 1 :(得分:0)

如果您使用的是Windows,那么如何以某种方式使用域策略部署Mercurial安装程序呢?