如何在BZR中编写特定于分支的挂钩?

时间:2010-02-20 04:26:28

标签: bazaar hook

在subversion中,钩子是基于每个存储库编写的。每个钩子都以描述性文件名(例如预提交)写入存储库根目录中名为“hooks”的文件夹中。根据BZR文档,钩子通常是全局安装的(例如在〜/ .bazaar / plugins /目录中)。

是否可以创建一个提交给分支的预提交钩子,并且无需用户安装插件即可运行?

我在文档和一些代码讨论中看到了一个名为“分支钩子”的引用,这听起来很有希望。

我找到了这个博客:http://schettino72.wordpress.com/2008/01/20/how-to-execute-tests-on-a-bazaar-pre-commit-hook/,引用了:

  

“集市上的插件不是项目   具体。所以你无法控制哪个   您的插件将项目(分支)   适用(它将适用于   全部)“。

这不太有希望。该博客提供了一种解决方法,您可以编写并安装一个插件,该插件可以在存储库中调用挂钩(如果存在)。理想情况下,我不想依赖用户安装插件来运行一个非常基本的挂钩,即一个简单的测试。这可能吗?

3 个答案:

答案 0 :(得分:2)

您可以使用bazaar服务器并在其上安装挂钩。

您也可以找到感兴趣的下一个链接:

http://people.samba.org/bzr/jelmer/bzr-shell-hooks/trunk/

http://bazaar.launchpad.net/~stianse/%2Bjunk/bzr-shell-hooks/

答案 1 :(得分:2)

我对此进行了一些研究,并发现在分布式修订控制系统中缺少特定于分支的钩子背后的动机。我将Subversion与集中式RCS进行了比较,作为所需功能的一个例子。

GIT和Mercurial是分布式RCS(如Bazaar),它们具有钩子工具,包括分支特定钩子和全局钩子的不同方法。无论如何,钩子不受版本控制,并且由于安全风险,它们需要分支的用户启用它们。在Mercurial documentation on hooks的标题为“挂钩与安全”的部分下,它说:

  

在Mercurial中,钩子不是修订版   控制,不要传播的时候   您从存储库克隆或拉取。   原因很简单:一个钩子   是完全随意的   可执行代码。它运行在你的   用户身份,享有您的特权   等级,在你的机器上。

     

任何人都会非常鲁莽   分布式修订控制系统   实现修订控制的钩子,   因为这会很容易   可剥削的方式颠覆了   修订版用户的帐户   控制系统。

在集中式RCS中,如Subversion,钩子在存储库服务器上运行,因此用户权限和服务器设置限制了破坏性钩子脚本的影响。在分布式RCS中,挂钩通常在用户的本地计算机上运行,​​这是有风险的。

正如vitaly.v.ch所提到的,可以设置一个Bazaar服务器来在推送和拉出时运行挂钩。但是,预提交挂钩没有意义,因为提交发生在用户的机器上。这将更像是一个预推钩。

Bazaar具有钩子所需的所有功能,但由于它们带来的安全风险,需要单独的用户配置来安装和启用它们。

答案 2 :(得分:1)

不,您的用户必须安装插件才能激活您的挂钩。