使用钩子与使用包装特定任务命令的扩展相比,有什么相对的利弊?
换句话说,决定是使用挂钩还是包装命令的标准是什么?
请列出一种方法是唯一选择的情况。我能想到的一个案例是为现有命令添加新参数。您也可以更改/删除参数,例如我将log
默认为log -g
,但graphlog
在存在一些“不兼容”参数时中止(请参阅graphlog.check_unsupported_flags
),所以我在这些情况下添加了log
封装器以删除-g
,因为强制堕胎是对人类的犯罪。
感觉钩子更干净利落。 Python钩子在hg进程中运行,因此没有性能问题。虽然使用extensions.wrapcommand
创建命令包装器很容易,但创建/禁用挂钩以及调整它们的顺序(它们应该首先是自包含的)是微不足道的。
这是来自hgrc doc的引用,它推荐了关于pre / post命令挂钩的标准挂钩,但它也适用于包装器上的挂钩:
...类似“commit”的钩子将在生成提交(例如标记)的所有上下文中调用,而不仅仅是提交命令。
另外我猜钩子不受GPL(或者它们是?),而extensions are中的命令包装器。
(我希望1.5k +用户可以创建mercurialhooks
代码.Git粉丝男孩用githooks
打败了我们。)
答案 0 :(得分:4)
我不能谈论许可问题,但是钩子和扩展之间的最大区别是钩子可以用任何语言编写,而扩展总是python。
如果一个人在python中写作,那么钩子和扩展之间几乎没有区别:
.hgrc
以启用它们我认为你的日志命令参数修改可以用pre-log
钩子完成,除了作为扩展完成。
TL; DR:如果你在python中写作没有什么区别,如果你不是钩子,那么你是唯一的选择。