【发布时间】:2010-10-05 03:03:24
【问题描述】:
使用钩子与使用为特定任务包装命令的扩展有哪些相对优缺点?
换句话说,决定是使用钩子还是包装命令的标准是什么?
还请列出一种方法是唯一选择的情况。我能想到的一种情况是为现有命令添加新参数。您还可以更改/删除参数,例如我默认 log 为 log -g 但 graphlog 在存在一些“不兼容”参数时中止(请参阅 graphlog.check_unsupported_flags),所以我添加了一个 log 包装器来删除-g 在这些情况下,因为强制堕胎是危害人类罪。
感觉钩子更干净利落。 Python 挂钩在 hg 进程中运行,因此不存在性能问题。虽然使用extensions.wrapcommand 创建命令包装器很容易,但创建/禁用钩子并调整它们的应用顺序(它们首先应该是独立的)是微不足道的。
这是来自hgrc doc 的引述,它建议使用标准挂钩而不是命令前/后挂钩,但它也适用于包装器上的挂钩:
...像“commit”这样的钩子将在所有生成提交(例如标签)的上下文中被调用,而不仅仅是提交命令。
另外我猜钩子不受 GPL 约束(或者它们是?),而 extensions are 中的命令包装器。
(我希望 1.5k+ 的用户可以创建一个 mercurialhooks 标签。Git 粉丝已经用 githooks 击败了我们。)
【问题讨论】:
-
重新标记,但稍微更改了名称以符合惯例。
-
@Niall:谢谢!我猜 git 男孩不太关心约定 :)