フックを使用する場合と、特定のタスクのコマンドをラップする拡張機能を使用する場合の相対的な長所と短所は何ですか?
言い換えれば、フックを使用するか、コマンドをラップするかを決定するための基準は何ですか?
1つのアプローチが唯一の選択肢である場合もリストしてください。私が考えることができる1つのケースは、既存のコマンドに新しい引数を追加することです。引数を変更/削除することもできます。たとえば、デフォルトではデフォルトですlog
がlog -g
、graphlog
いくつかの「互換性のない」引数がある場合は中止します(を参照) 。強制中絶は人道に対する罪であるため、これらの場合に削除するラッパーgraphlog.check_unsupported_flags
を追加しました。log
-g
フックがよりきれいにカットされているように感じます。Pythonフックはhgプロセスで実行されるため、パフォーマンスの問題はありません。また、コマンドラッパーの作成には簡単に使用extensions.wrapcommand
できますが、フックを作成/無効にしたり、適用する順序を調整したりするのは簡単です(そもそもフックは自己完結型である必要があります)。
そして、これはhgrc docからの引用で、pre / postコマンドフックよりも標準フックを推奨していますが、ラッパー上のフックにも適用されます。
...「commit」のようなフックは、commitコマンドだけでなく、commit(タグなど)を生成するすべてのコンテキストで呼び出されます。
また、フックはGPLの対象ではない(またはそうですか?)のに対し、拡張機能のコマンドラッパーは対象ではないと思います。
(1.5k以上のユーザーがタグを作成できることを願っています。Gitmercurialhooks
ファンの男の子が私たちを打ち負かしましたgithooks
。)