2010-08-20 99 views
4

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

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

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

+0

我敢肯定,你可以在用户的​​hgrc中放置一个钩子脚本,使其适用于所有的仓库。此外,你可以让钩子文件在Mercurial repo ... – Borealid 2010-08-20 00:49:12

+1

@Borealid这可能是事实,但我仍然有兴趣知道我的问题的答案。如果扩展可以修改核心命令,我还会考虑为企业环境添加其他功能。不幸的是,Mercurial API没有太多文档。 – 2010-08-20 01:09:04

回答

4

回答我的问题

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

从源代码:

裹在 表名为`命令”命令。

使用包装器替换命令表 中的命令。将封装的命令 插入到由表参数指定的命令表 中。该 包装将被称为像 包装(原稿,* ARGS,** kwargs)其中 原稿是原来的(包装) 功能,* ARGS,** kwargs是 参数传递给它。

几个例子:

+1

当包装命令不要改变输出时要小心。 Eclipse和其他环境使用命令行输出进行整合,如果它们发生变化,将会窒息。 – 2010-08-20 02:48:06

2

只是要注意:两个扩展和挂钩具有完全相同的质量 - 部署限制。在这两种情况下,您都必须引导内部用户下载一个软件,无论是挂钩还是扩展,然后在homedir或repo中的hgrc中启用它。

对于这两个钩子和扩展,你可以使用任何机制来分发软件,可以在全球范围内的/ etc使他们/善变/ hgrc

扩展有一定的优势超过钩来有多深,他们可以在多变的内部挖掘,但部署是相同的。