特定の条件下でプッシュをブロックする Mercurial フックを作成しようとしていますが、プッシュをブロックするかどうかを判断するには、プッシュが送信されるリポジトリを知る必要があります。prechangegroup
理想的には、これはリモートリポジトリ側のフックで行われることを知っていますが、私の場合は不可能です-理由については以前の質問を参照してください。(Ry4anの提案は気に入りましたが、これを多数のリポジトリに対して行う必要があるため、リポジトリごとに複製を作成するのは適切ではないようです。)
とにかく、最初はpre-push
フックでこれを行っていましたが、それは非常に特定の状況でのみ呼び出されます。特に、ユーザーが に対して定義されたエイリアスを持っている場合、push
私のフックは呼び出されません。つまり、不注意でバイパスされる可能性があります。次に考えたのはpreoutgoing
フックでした。これは間違いなくより確実です。プッシュ以外の状況で呼び出される可能性がありますが、渡されたsource
パラメーターを使用して簡単に除外できます。
ただし、preoutgoing
フックには宛先リポジトリがありません。そのためにバグが報告されていますが、今のところあまり役に立ちません。現在、2 つのフックを使用してこの問題を回避しています。pre-push
目的地を決定するものと、実際preoutgoing
にそれに作用するもの。もちろん、pre-push
フックが実行されない可能性もありますが、その場合、プッシュが安全でない可能性があることをユーザーに警告し、プッシュを破棄するオプションを提供します。
2 つの質問があります。まず、これを達成するためのより良い方法はありますか? 第二に、そうでない場合、両方のフック (両方とも処理中) に渡されるオブジェクトが同じであると想定しても安全repo
ですか? つまり、次のようなことをすると
repo.some_custom_property = outgoing_url
私のフックでは、後で呼び出されるフックが同じオブジェクトを受け取り、それを介してカスタム プロパティにアクセスできることがpre-push
保証されていますか? 環境変数または一時ファイルを使用してこれを行うことができることはわかっていますが、これはより良いように思え、その後のクリーンアップについて心配する必要はありません。this questionも見ましたが、あまり役に立ちませんでした。preoutgoing
repo