4

特定の条件下でプッシュをブロックする 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も見ましたが、あまり役に立ちませんでした。preoutgoingrepo

4

0 に答える 0