フックスクリプトとは、リポジトリのイベント(新規リビジョンの作成やバージョン管理されていないプロパティの変更など)によってトリガーされるプログラムです。各フックには、イベントの内容、操作対象のターゲット、およびイベントをトリガーしたユーザー名を知るための十分な情報が渡されます。フックの出力またはリターンステータスに応じて、フックプログラムはアクションを続行、停止、または何らかの方法で中断できます。実装されているフックの詳細については、Subversion Book の フックスクリプト の章を参照してください。
これらのフックスクリプトは、リポジトリをホストするサーバーによって実行されます。TortoiseSVN では、特定イベント時にローカルで実行されるクライアントサイドのフックスクリプトも設定できます。詳細については、「クライアントサイドのフックスクリプト」のセクションを参照してください。
サンプルのフックスクリプトは、リポジトリの hooks
ディレクトリにあります。これらのサンプルスクリプトは Unix/Linux サーバーに適していますが、サーバーが Windows ベースの場合は修正が必要です。フックは、バッチファイルまたは実行可能ファイルにすることができます。以下のサンプルは、pre-revprop-change フックを実装するために使用できるバッチファイルを示しています。
rem Only allow log messages to be changed. if "%4" == "svn:log" exit 0 echo Property '%4' cannot be changed >&2 exit 1
stdout に送信されたものはすべて破棄されることに注意してください。コミット拒否ダイアログにメッセージを表示したい場合は、stderr に送信する必要があります。バッチファイルでは、これは >&2
を使用して実現できます。
フックスクリプトがコミットを拒否した場合、その決定は最終的なものです。ただし、マジックワードの手法を使用して、スクリプト自体にオーバーライドメカニズムを組み込むことができます。スクリプトが操作を拒否したい場合、最初にログメッセージをスキャンして、固定フレーズまたはプレフィックス付きのファイル名のいずれかの特別なパスフレーズを探します。マジックワードが見つかった場合、コミットの続行を許可します。フレーズが見つからない場合は、「“マジックワードを言ってください”」のようなメッセージでコミットをブロックできます。:-)