是否可以通过创建扩展来修改核心Mercurial命令(例如hg commit
或hg status
)的行为?
例如,是否可以修改hg commit
以要求用户输入问题跟踪ID?
我知道可以使用钩子脚本,但是这些脚本不是通过hg pull
分发的,而是需要为每个使用的存储库配置。
答案 0 :(得分:4)
回答我自己的问题
Mercurial API提供extensions.wrapcommand(table, command, wrapper)
方法,似乎提供了所需的功能。
来自源代码:
包含名为`command'的命令 表
命令表中的替换命令 用包装。包装的命令会 插入命令表 由表参数指定。该 包装器将被称为 包装(orig,* args,** kwargs)在哪里 orig是原始的(包裹的) 功能,和* args,** kwargs是 传递给它的论据。
几个例子:
答案 1 :(得分:2)
请注意:扩展和挂钩具有完全相同的大规模部署限制。在这两种情况下,您都必须诱使内部用户下载一个软件,无论是钩子还是扩展,然后在他们的homedir或repo中的hgrc中启用它。
对于钩子和扩展,您可以使用任何机制分发软件,并可以在/ etc / mercurial / hgrc中全局启用它们
扩展比钩子更有优势,因为它们可以在多个内部挖掘深度,但部署是相同的。