使用扩展修改核心Mercurial命令的行为?

时间:2010-08-20 00:44:42

标签: mercurial

是否可以通过创建扩展来修改核心Mercurial命令(例如hg commithg status)的行为?

例如,是否可以修改hg commit以要求用户输入问题跟踪ID?

我知道可以使用钩子脚本,但是这些脚本不是通过hg pull分发的,而是需要为每个使用的存储库配置。

2 个答案:

答案 0 :(得分:4)

回答我自己的问题

Mercurial API提供extensions.wrapcommand(table, command, wrapper)方法,似乎提供了所需的功能。

来自源代码:

  

包含名为`command'的命令   表

     

命令表中的替换命令   用包装。包装的命令会   插入命令表   由表参数指定。该   包装器将被称为   包装(orig,* args,** kwargs)在哪里   orig是原始的(包裹的)   功能,和* args,** kwargs是   传递给它的论据。

几个例子:

答案 1 :(得分:2)

请注意:扩展和挂钩具有完全相同的大规模部署限制。在这两种情况下,您都必须诱使内部用户下载一个软件,无论是钩子还是扩展,然后在他们的homedir或repo中的hgrc中启用它。

对于钩子和扩展,您可以使用任何机制分发软件,并可以在/ etc / mercurial / hgrc中全局启用它们

扩展比钩子更有优势,因为它们可以在多个内部挖掘深度,但部署是相同的。