4

フックを使用する場合と、特定のタスクのコマンドをラップする拡張機能を使用する場合の相対的な長所と短所は何ですか?

言い換えれば、フックを使用するか、コマンドをラップするかを決定するための基準は何ですか?

1つのアプローチが唯一の選択肢である場合もリストしてください。私が考えることができる1つのケースは、既存のコマンドに新しい引数を追加することです。引数を変更/削除することもできます。たとえば、デフォルトではデフォルトですloglog -ggraphlogいくつかの「互換性のない」引数がある場合は中止します(を参照) 。強制中絶は人道に対する罪であるため、これらの場合に削除するラッパーgraphlog.check_unsupported_flagsを追加しました。log-g

フックがよりきれいにカットされているように感じます。Pythonフックはhgプロセスで実行されるため、パフォーマンスの問題はありません。また、コマンドラッパーの作成には簡単に使用extensions.wrapcommandできますが、フックを作成/無効にしたり、適用する順序を調整したりするのは簡単です(そもそもフックは自己完結型である必要があります)。

そして、これはhgrc docからの引用で、pre / postコマンドフックよりも標準フックを推奨していますが、ラッパー上のフックにも適用されます。

...「commit」のようなフックは、commitコマンドだけでなく、commit(タグなど)を生成するすべてのコンテキストで呼び出されます。

また、フックはGPLの対象ではない(またはそうですか?)のに対し、拡張機能のコマンドラッパーは対象ではないと思います

(1.5k以上のユーザーがタグを作成できることを願っています。Gitmercurialhooksファンの男の子が私たちを打ち負かしましたgithooks。)

4

1 に答える 1

4

ライセンスの問題について話すことはできませんが、フックと拡張機能の最大の違いは、フックは任意の言語で記述できるのに対し、拡張機能は常にPythonであるということです。

Pythonで書いている場合、フックと拡張機能の間にほとんど違いはありません。

  • どちらも水銀の内部を深く掘り下げることができます
  • どちらも、ユーザーがそれら.hgrcを有効にするために変更する必要があります
  • どちらもコマンドをラップ/インターセプトできます

pre-logログコマンドの引数の変更は、拡張機能として行うだけでなく、フックを使用して行うこともできると思います。

TL; DR:Pythonで書いている場合はほとんど違いはなく、フックでない場合は唯一の選択肢です。

于 2010-10-04T19:03:24.117 に答える